37.1K subscribers
1.46K photos
33 videos
5 files
1.62K links
加入频道
✒️ Мои собеседования (Golang developer)


Привет, меня зовут Олег, я разработчик со стажем почти 10 лет.

Разработкой начал заниматься ещё со старшей школы, изучал C/C++ (очень пригодилось при написании скриптов в injection для ультимы онлайн). Профессионально начал работать разработчиком приблизительно с 2014, основной язык до 2020 года был C# с примесью C++. Сначала разрабатывал и поддерживал некоторые проекты в банковской сфере, потом резко поменял предметную область и ушёл писать софт для автоматизации работы одного строительного девелопера. На начальных этапах это было огромное легаси на C# от бывшего архитектора, решившего стать программистом, с кучей багов и неочевидных решений, пришлось много переписывать.

Со временем появились задачи, которые не были привязаны к языку и технологиям в принципе (изначально писал, по сути, плагины к CAD-приложениям), и я попробовал Golang, а вместе с ним и микросервисы, NoSQL, gRPC и прочие модные штуки. Побывал в шкуре админа-девопса, так как новые сервисы я запускал и поддерживал сам.

➡️ Читать дальше

@Golang_google
📰 Новости из мира Go: вредоносное ПО, зарплаты разработчиков, книги и новые релизы

Специалисты компании Avast заявили о том, что сейчас наблюдается рост количества вредоносных и потенциально опасных программ, которые написаны на Golang. Новые экземпляры вредоносов обнаруживаются каждую неделю, но наиболее важные зловреды — бэкдор Backdoorit и IRC-бот Caligula.

Оба могут работать на самых разных платформах. Сколько они существуют — сказать сложно, поскольку обнаружили их в конце апреля, когда они еще не детектировались базами VirusTotal.

➡️ Читать дальше

@Golang_google
🎮 CloudRetro

Cервис, написанный на GO предоставляет возможность поиграть в ретро-игры в облаке

Также, есть возможность играть в одну игровую сессию с нескольких устройств. Интресный проект для изучения.

➡️ GitHub
➡️ Video demo

#Go #Game

@Golang_google
Build Systems With Go: Everything a Gopher must know

📖 Книга

@Golang_google
☁️ Правим QEMU железным кулаком

Виртуализация, на мой взгляд, всё ещё остаётся одной из самых важных технологий в администрировании ЦОД. Да, конечно “все” будут рассказывать, что контейнеры намного более удобные, и всё надо запихивать в Кубер, и всё такое… Но после гигантского нагромождения никому не нужных конфигов, в какой-то момент ты начинаешь понимать, что зашёл слишком далеко.

И действительно. Мы пишем ПО для обслуживания целого ЦОДа. Изначально всё должно было быть контейнером, и всё должно было распространяться через CI/CD, но когда дело доходит до дела, ты начинаешь понимать, что нет ничего проще установленного линукса, на котором напрямую запускается твоя утилита, написанная на golang.

Но, есть одна проблема. Виртуальными машинами не так легко управлять, как это можно делать с контейнерами. Ок, мы сами с усами, можем и вручную написать кое-чего.

Под катом, давайте окунёмся в мир работы с QEMU и подёргаем сам эмулятор. Конечным результатом должна быть клонированная через golang Debian Linux.

➡️ Читать дальше

@Golang_google
💻 Средние highload паттерны на Go

Мне импонируют простые подходы, так как over engineering подходы требуются в исключительных проектах, и то чаще всего только в отдельно взятых подсистемах, в остальном можно воспользоваться давно известными лучшими практиками. Статья ориентирована на начинающих разработчиков и может служить отправной точкой для дальнейшего изучения. В этой статье подходы ориентированы на масштабирование приложения при верхнеуровневом рассмотрении. Подходы универсальны, приписка языка Go только потому, что сама реализация приложения на нем. Для наглядности, примеры будут упрощены, а чтобы было интереснее наблюдать, проведем замеры производительности. Ну и конечно же делитесь своим опытом масштабирования, буду рад взять на заметку.

➡️ Читать дальше

@Golang_google
Golang-дайджест № 20 (1 – 31 августа 2022)

Свежая подборка новостей и материалов

Выпущена версия 1.19 — что нового:

- Сборщику мусора теперь можно задать ограничение памяти. Подробнее здесь.

- Модель памяти теперь явно определяет поведение sync/atomic пакета.

- Пакет os/exec больше не учитывает относительные пути при PATH поиске.

- Комментарии к документам теперь поддерживают ссылки, списки и заголовки с префиксом.

- Исправления проблем, связанных с дженериками.

- discussion: Добавление стандартного интерфейса итератора в Go?

- GoLand Roadmap 2022.3

- Выпущен GoLand 2022.2

Alcione Ribeiro опубликовала в github схему вязания крючком, чтобы связать своего собственного персонажа Go gopher!

Awesome:
- https://awesome-go.com/

- https://github.com/guardrailsio/awesome-golang-security

- https://github.com/Binject/awesome-go-security

- https://gist.github.com/hbt/d6ab942b882d5b94f331c5257076d05e

- https://github.com/avelino/awesome-go

@Golang_google
pgwebweb-клиент для СУБД PostgreSQL реализованный на Go

Работает на всех актуальных платформах. Из преимуществ: простая установка, импорт/експорт данных

Ссылка на проект

@Golang_google | #Interesting #Database #Go
➡️ Как Go выполняет встраивание

В статье рассказано, как Go подходит к инлайнингу функций — этот процесс ещё называют встраиванием. В статье разберёмся, зачем вообще это нужно, какой профит можно получить для ускорения работы кода, а когда плюсы могут обернуться минусами. На примерах углубимся в специфику Go: как этот язык инлайнит функции, что можно и что нельзя встроить, какие возможности доступны в разных версиях. Также обсудим ограничения и способы обойти их.

➡️ Читать дальше
🎞 Видео

@Golang_google
🛠 Инструменты для управления уязвимостями в Go-проекте на текущий момент.

➡️ Читать
⚙️ Vulnerability database

@Golang_google
🦾 restic

это быстрая, эффективная и безопасная программа резервного копирования на GO. Инструмент поддерживает три основные операционные системы (Linux, macOS, Windows) и несколько более мелких (FreeBSD, OpenBSD).

⚙️ Github
🗒 Docs

@Golang_google
↪️ Мой аналог The GO Playground

Под данным катом описано как я создал свой аналог The GO Playground. Это было сделано исключительно по собственному желанию в образовательных целях. Ссылка на репозиторий.
Кодовая база проекта традиционно состоит из фронта и бэка. В качестве языка бэка используется Go, на фронте JS + jQuery.


В моей реализации реактивная отправка данных на фронт осуществляется с помощью протокола WS, а получение исходного кода по ссылке с помощью HTTP. Для роутинга в приложении я использовал httprouter. Изначально я использовал html/template и автообновление блоков HTML c помощью функции load(), но потом отошел от этой идеи ввиду некоторых сложностей реализации.

На самом деле оригинальная платформа сделана очень хитрым образом с точки зрения использования ресурсов системы. Если в пользовательской программе используются конструкции задержки по типу time.Sleep, программа на самом деле не спит, а выполняет свой код непрерывно, минуя задержки. А на выходе генерируется последовательность байт с учетом задержки, которую фронт отрабатывает таким образом, что пользователь не видит разницы. Создается ощущение, что программа запущена локально. Для безопасной работы с сетью и файловой системой используются некоторые трюки, про все подробности, используемые в The GO Playground можно почитать по ссылке. Оригинальный код платформы по ссылке.

Домашняя страница выглядит весьма минималистично, на выбор представлено пару тестовых программ. Блок ввода кода, блок результата выполнения программы.

➡️ Читать
⚙️ Github

@Golang_google
🔥 Полезная подборка каналов

🦫 Golang
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@Golang_google - go для разработчиков
@golangtests - тесты и задачи GO
@golangl - чат Golang
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go

🦾 Machine learning
@ai_machinelearning_big_data – все о машинном обучении
@data_analysis_ml – все о анализе данных.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседования Data Science
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@neural – все о нейронных сетях
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml

🐍 Python
@pythonl – python для датасаентиста
@pro_python_code – python на русском
@python_job_interview – подготовка к Python собеседованию
@python_testit тесты на python
@pythonlbooks - книги Python
@Django_pythonl django
@python_djangojobs - работа Python

🐧 Linux
@inux_kal - чат kali linux
@inuxkalii - linux kali
@linux_read - книги linux

👷‍♂️ IT работа

@hr_itwork - ит-ваканнсии

🔋 SQL
@sqlhub - базы данных
@chat_sql - базы данных чат

🤡It memes
@memes_prog - ит-мемы

💡 Javascript / front
@javascriptv - javascript изучение
@about_javascript - javascript продвинутый
@JavaScript_testit -тесты JS
@htmlcssjavas - web
@hashdev - web разработка

⚙️ Rust
@rust_code - язык программирования rust
@rust_chats - чат rust

#️⃣ c# c++
@csharp_ci - c# c++кодинг
@csharp_cplus чат

☕️ Java
@javatg - Java для програмистов
@javachats Java чат
@java_library - книги Java
@android_its Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит
🍸 Как построить масштабируемый API на Go с помощью Gin

Что такое Gin?
Gin  —  это самый популярный высокопроизводительный фреймворк для Go (Golang), с помощью которого можно создавать веб-приложения. Если вы знакомы с ExpressJS, то Gin очень на него похож, и работать вам с ним будет довольно удобно.

Что мы будем создавать?
Проект у нас будет стандартный. Мы создадим простой API для работы с книгами. Не волнуйтесь, хоть ваш проект и будет основан на масштабируемом подходе, сам API окажется довольно простым, и проблем с пониманием процесса не возникнет.

Что необходимо?
Вам потребуется базовое понимание Go. Лично я в качестве редактора кода использую Visual Studio Code, вы же вольны выбирать на свое усмотрение. Только имейте ввиду, что в статье вам встретится команда code .  —  это собственная команда VSCode, которая открывает в редакторе текущий каталог.

➡️ Читать
⚙️ Github

@Golang_google
This media is not supported in your browser
VIEW IN TELEGRAM
🎇 Echelon

Кросс-платформенная библиотека для организации логов в иерархической структуре

Настраиваемый и работает с любым терминалом, совместимым с VT100. Может использоваться из нескольких горутинов

Ссылка на проект

#Go #Windows #Logging #Useful

@Golang_google
🐳 Руководство по Docker для аналитика даннных.

Представьте, как вы устанавливаете программное обеспечение, требующее установку всех его зависимостей. Придется столкнуться со множеством ошибок, вручную выяснить и устранить все их причины. Каждый раз  —  попытки запустить всю систему заново, чтобы наконец-то правильно завершить установку… Именно в этот момент на помощь приходит Docker, пытаясь серьезно облегчить жизнь.

Содержание статьи:

1. Образы и контейнеры.
2. Запуск первой программы в Docker.
3. Основные команды контейнеров Docker.
4. Командная строка Docker-контейнера.
5. Пользовательские образы Docker.
6. Запуск веб-приложения в Docker.
7. Docker и сопоставление портов.
8. Выводы.


➡️ Читать дальше

@Golang_google
modgvинструмент, который позволяет отрендерить граф зависимостей вашего go-проекта

Позволяет конвертировать 'go mod graph' в Graphviz представление с возможностью сохранения в png

Ссылка на проект

@Golang_google | #Interesting #Go #Graph
📌 Golang RPC и все-все-все…

Disclaimer: this is not another one gRPC hate article... Oh, whait...

Начнем издалека - знаете, всегда было интересно, а почему, собственно, для golang существует такое большое разнообразие библиотек, для каких-то часто используемых сущностей, как-то - роутеры http (fasthttprouter забыли, как подсказали в коментах) или cache?

С выбором RPC вроде все просто, gRPC - наше всё (вы, кстати, в курсе, что g здесь - это не Google внезапно). Но не тут-то было...

Все просто без ума от Мэри gRPC (нет).

Начнем с того, что в golang изначально реализовали net/rpc со своим сериализатором gob. Типа есть потребность - в golang есть решение из коробки (так же история, что и с роутером http - он есть, но все используют сторонние решения из-за параметризованных путей запросов). И тут засада - этот rpc можно только между golang приложениями использовать. Потом выкатили gRPC и все заверте... Вкратце - gRPC использует http/2 и protobuf для сериализации (запомним, rpc - это протокол обмена плюс сериализатор). Причем gRPC реализация доступна для многих языков, фактически нет привязки, на чем писать клиентскую и серверную часть. So far, so good...

Однако не все так гладко... Понятно стремление Google объять все возможные кейсы, но! К оригинальной реализации gRPC со временем появилось куча вопросов. Иначе как объяснить, что куча контор начали пилить свои собственные реализации RPC (и/или сериализаторов)? Также, внезапно, выяснилось, что требования к RPC внутри облака (читай между микросервисами) и RPC между клиентами за пределами облака/датацентра и сервисами внутри него (за ingress/proxy/load balancer - как хотите называйте) как бы "немножко" разные? Да и выбор http/2 в качестве транспорта - ну кто-же знал, что внедрёж пойдет не так (быстро), как ожидалось.

➡️ Читать

@Golang_google
fzfтерминальная утилита, которая представляет из себя интерактивный фильтр Unix для командной строки

Можно использовать с любым списком: файлы, история комманд, процессы, имена хостов, закладки, история git-коммов и т. д.

Ссылка на проект

@Golang_google | #Interesting #Ruby #Go #Terminal
✔️ [Golang] Ошибки, которые нельзя обработать

Паника в горутине
Если мы в обработчике будем использовать горутину, которая по каким-то причинам вызвала панику, Golang не сможет обработать эту панику и приложение упадет с ошибкой и все запросы, которые сейчас обрабатывает сервис оборвутся.

Eсли написать примерно вот такой код

type User struct {
Email string
}

func UpsertUser(r *http.Request) (User, error) {
return User{}, nil
}

func SendEmail(u User) {
panic("sending email is not implemented")
}

func CreateUser(w http.ResponseWriter, r *http.Request) {
user, err := UpsertUser(r)

if err != nil {
// handling error
}

go func() {
SendEmail(user)
// may be something else
}()
}


То при вызове функции CreateUser сервис упадет.

Для того, что бы исправить это, нужно обрабатывать паники в каждой горутине

➡️ Читать дальше

@Golang_google