Библиотека Go (Golang) разработчика
2.57K subscribers
252 photos
93 videos
29 files
327 links
Полезные материалы по всему, что может быть полезно Golang разработчику. По всем вопросам @evgenycarter
Download Telegram
Мои собеседования (Golang developer)

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

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

Некоторое время назад наткнулся на пост про собеседования и решил рассказать Хабру про свой опыт. Возможно, кому-то он окажется полезным.

Почему вообще собеседовался? Во-первых, стало интересно - а как это, работать в большой компании разрабов? На последнем месте у меня было два разработчика, и я чуть-чуть попробовал себя в роли тимлида бэкендеров.

Во-вторых, как и у всех – деньги (двое детей, машина в кредит, вот это вот всё...).

В-третьих, понимание того, что я хорошо уже так стагнирую на своём прошлом месте, потому что всё, что нужно – уже написано, и требует только поддержки, а более-менее интересные идеи нельзя реализовать текущей маленькой командой.

В-четвёртых, на прошлом месте работы приходилось заниматься не только разработкой, но и настройкой деплоя, администрированием, ручным тестированием и прочей «обвязкой» программистской деятельности, это очень выматывает, если вы понимаете о чём я – хочешь развиваться как разработчик, но в итоге тратишь кучу времени на смежные области.

Скажу сразу, что во все компании, в которые я проходил собеседования и о которых далее пойдет речь, я шёл как middle или senior. На самом деле я опирался в основном на цифру в графе зарплаты. Из других вводных - ориентировался на хотя бы частичную удалёнку и зарплату в рынке, но в принципе если мне бы очень уж понравилось, готов был обсуждать на 10-20% меньше.

https://habr.com/ru/articles/683920/

👉 @golang_lib
👍8
Есть ли жизнь на Go после C#?

Всем привет! На связи Пётр, Go-разработчик в команде Ozon, которая занимается управлением товарами торговой площадки. Всё, что загружают продавцы, обрабатывается нашими сервисами. Девять месяцев назад я сменил основной язык программирования с C# на новый для меня Go. В статье будут впечатления от Go, расскажу о некоторых различиях между языками, а в конце поделюсь своим опытом поиска работы на новом языке. Ведь вопрос смены стека технологий рано или поздно встаёт перед каждым разработчиком.

https://habr.com/ru/companies/ozontech/articles/684422/

👉 @golang_lib
👍5
Media is too big
VIEW IN TELEGRAM
Как на самом деле устроены каналы в Golang?

Разбираемся со внутренним устройством каналов: как реализована потокобезопасноть, как в буферизированном канале хранятся данные, какие интересные оптимизации там есть, как работает оператор Select, как каналы закрываются и др.

00:00 Вступление
00:38 Какие свойства каналов интересно изучить?
01:22 Проектирование каналов
01:32 В какой области памяти хранятся каналы?
02:00 Структура канала
04:08 Реализация свойств: goroutine-safe и FIFO
05:04 Как работают буфер канала и mutex
07:18 Передача данных в канал
08:21 Получение данных из канала
08:38 Переполнение буфера
09:05 Как устроен планировщик (Scheduler)
10:14 Как поставить горутину на паузу
10:56 Как разбудить горутину: очередь спящих горутин - sendq
13:49 Чтение из переполненного канала
15:57 Пробуждение спящей горутины Sender
17:43 Чтение из пустого канала
18:44 Передача данных напрямую между стэками двух горутин
19:11 Небуферизированные каналы
19:37 Итоги по изучению интересных свойств каналов
20:35 Изучаем код реализации каналов
28:22 Изучаем поведение канала вживую с помощью дебагера
35:23 Как работает Select
37:14 Закрытие канала
38:13 Код закрытия канала
39:20 Итоги: почему каналы спроектированны именно так?
40:48 Заключение

источник

👉 @golang_lib
👍7
Go functions: автоматическое масштабирование и метрики с Kubernetes + OpenFaaS

OpenFaaS - открытый фреймворк, опирающийся на свободные технологии с открытым исходным кодом, такие как Docker и формат OCI, - демократизирует то, что обычно связано с замкнутым кругом поставщиков: функции как сервис. Развернутая в Kubernetes, она предлагает автомасштабирование, метрики и встроенный пользовательский интерфейс из коробки.

https://dominikbraun.io/blog/go-functions-as-a-service-with-kubernetes-and-openfaas/

👉 @golang_lib
👍2
Применение чистой архитектуры в Go

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

На старте проекта приходится принимать множество решений. Большинство инженеров при этом рассматривают область применения проекта и решают, при помощи каких инструментов он будет реализовываться. Речь, в частности, о языках программирования, фреймворках, базах данных, внешних API, вариантах развёртывания. Принимая такие решения на самых ранних этапах, они замыкаются на этих инструментах, пронизывают ими всю базу кода, в результате чего её становится сложно менять и поддерживать.

https://habr.com/ru/companies/timeweb/articles/810857/

original https://blog.geisonbiazus.com/posts/applying-clean-architecture-in-go

👉 @golang_lib
👍4
Средние highload паттерны на Go

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

https://habr.com/ru/articles/684904/

👉 @golang_lib
👍6
Пишем нативный потоковый пайплайна на Go

За последний год в Beam Go Sdk появилось несколько функций для поддержки нативных потоковых DoFns. В этом докладе Дэнни, инженер-программист Google, и Джек, инженер-программист Google, расскажут об этих функциях и обсудят, как их можно использовать для создания потоковых конвейеров, написанных полностью на Go.
Вы получите представление о некоторых проблемах, связанных с обработкой неограниченных наборов данных. Вы также узнаете, как можно построить собственные потоковые DoFns для решения этих проблем.

https://www.youtube.com/watch?v=PNDY2OYASrE

👉 @golang_lib
👍4
Паттерны гонки данных в Go

Uber использует язык Golang (сокращенно Go) в качестве основного языка программирования для разработки микросервисов. Наш монорежим Go состоит примерно из 50 миллионов строк кода (и продолжает расти) и содержит около 2 100 уникальных сервисов Go (и продолжает расти).

https://www.uber.com/blog/data-race-patterns-in-go/

👉 @golang_lib
👍5🤣2
Media is too big
VIEW IN TELEGRAM
Код на Golang: форматирование и линтинг

00:00 | Вступление
00:08 | Зачем нужно форматирование кода на Go
00:45 | Форматер кода fmt
01:51 | Зачем нужен линтер кода на Go
02:08 | Линтер vet
03:52 | Линтер golangci-lint
06:40 | Линтер gofumpt
06:59 | Запускаем линтер gofumpt в режиме исправления ошибок
07:27 | Конфигурационный файл для golangci-lint
08:09 | Git Hooks
08:34 | Устанавливаем Left Hook
09:29 | Настраиваем запуск golangci-lint перед коммитом
09:37 | Коммитим изменения
09:54 | Заключение

источник

👉 @golang_lib
👍5
Media is too big
VIEW IN TELEGRAM
Go and LLMs - GopherCon SG 2023
Чанг Сау Шонг

Использование возможностей больших языковых моделей с помощью Go.

источник

👉 @golang_lib
👍5
Пишем систему логической репликации Postgres на Golang

Мы создаем Dolt, первую в мире базу данных SQL с контролем версий. Dolt совместим с MySQL, но многие из наших потенциальных клиентов хотели бы иметь версию, совместимую с Postgres, поэтому мы усердно работаем над созданием DoltgreSQL.

https://www.dolthub.com/blog/2024-03-08-postgres-logical-replication/

👉 @golang_lib
👍3🔥1
FormStream

FormStream - это потоковый парсер Golang для многокомпонентных данных, используемый в основном при отправке веб-форм и загрузке файлов.

Особенности
Обеспечивает потоковый парсер, избавляя от необходимости хранить целые файлы в памяти или на диске в большинстве случаев.
Отличается крайне низким потреблением памяти.
Обеспечивает высокую производительность, значительно превосходящую традиционные методы.

https://github.com/mazrean/formstream

👉 @golang_lib
👍52
Когда Kubernetes и Go не очень хорошо работают вместе

Go не знает об ограничениях, установленных для его контейнера, что приводит к некоторым проблемам, которые нелегко отследить. Это история о том, как я наткнулся на одну из них.

https://lalatron.hashnode.dev/when-kubernetes-and-go-dont-work-well-together

👉 @golang_lib
👍5
Оптимизация Go: как повысить скорость и эффективность кода

Меня зовут Макс, я Go-разработчик в компании SimbirSoft. Язык Go (Golang) стремительно набирает популярность, он всё чаще внедряется в существующие программные решения, а также встречается в стеке новых проектов. Высокая производительность и скорость работы – его главные преимущества, поэтому для реализации бизнес-задач он подходит как нельзя кстати. Go легко поддерживается и отлично годится для создания MVP, из-за чего востребованность в нём растёт.

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

https://habr.com/ru/companies/simbirsoft/articles/819015/

👉 @golang_lib
👍6👎2
Высокоскоростная передача пакетов в Go: От net.Dial до AF_XDP

Недавно я разработал программу на Go, которая отправляет ICMP ping-сообщения на миллионы IP-адресов. Естественно, я хотел, чтобы это происходило как можно быстрее и эффективнее. Это побудило меня изучить различные методы взаимодействия с сетевым стеком и быстрой отправки пакетов! Это было увлекательное путешествие, поэтому в этой статье я поделюсь некоторыми своими наработками и задокументирую их для себя в будущем :) Вы увидите, как мы достигаем 18,8 Мбит/с, используя всего 8 ядер. На Github есть репозиторий с примерами кода, что облегчает процесс.

https://toonk.io/sending-network-packets-in-go/

👉 @golang_lib
👍11
Челлендж по обработке миллиарда строк на Go: от 1 минуты 45 секунд до 4 секунд

Пару недель назад я прочитал о запавшем мне в душу челлендже по обработке миллиарда строк, поэтому захотел решить его на Go.

Я немного опоздал, соревнования проводились в январе. И на Java. Меня не особо интересует Java, зато давно интересует оптимизация кода на Go.

Этот челлендж был очень прост: обработать текстовый файл названий метеорологических станций и температур, и для каждой станции вывести минимальное, среднее и максимальное значение. Чтобы упростить задачу, было ещё несколько ограничений, однако я проигнорировал те, что относятся только к Java.

https://habr.com/ru/articles/798215/

👉 @golang_lib
👍5
Изучение Go в 2024 году; от новичка до сеньора

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

https://www.bytesizego.com/blog/learning-golang-2024

👉 @golang_lib
👍9
Konf

Простейший загрузчик конфигураций для Go, который читает/смотрит из файла, env, флага и облаков (AWS, Azure, GCP).

📌 Основные возможности:

🔧 konf.Unmarshal для чтения конфигурации в любой тип объекта.
🔧 konf.OnChange для регистрации колбэков при изменении конфигурации.
🔧 konf.Explain для понимания, откуда загружается конфигурация.
🔧 Различные провайдеры для загрузки конфигурации из облаков (AWS, Azure и GCP).
🔧 Zero dependencies в core модуле, который поддерживает загрузку конфигурации из переменных окружения, флагов и встроенной файловой системы.

https://github.com/nil-go/konf

👉 @golang_lib
👍4
Освоение регулярных выражений в Go

От базовых паттернов до продвинутых техник - эта статья вооружит вас знаниями об эффективном использовании regex в ваших Go-приложениях.

package main

import "strings"

func extractURLs(input string) []string {
var urls []string
words := strings.Fields(input)

for _, word := range words {
if strings.HasPrefix(word, "http://") || strings.HasPrefix(word, "https://") || strings.HasPrefix(word, "www.") {
urls = append(urls, word)
}
}

return urls
}


https://www.honeybadger.io/blog/a-definitive-guide-to-regular-expressions-in-go/

👉 @golang_lib
👍2