Сколько ты зарабатываешь? 😄
Опрос анонимный, интересуют только Go-разработчики. Грейд не важен.
Опрос анонимный, интересуют только Go-разработчики. Грейд не важен.
Anonymous Poll
9%
< 100 тыс р
15%
100-200 тыс р
11%
200-300 тыс р
8%
300-400 тыс р
3%
400-500 тыс р
3%
500+ тыс р
51%
Я не Go-разработчик / Посмотреть ответы
Публичное Code Review
https://youtu.be/oqBTz3E19GA
Недавно в сообществе Gopher Club разгорелась жаркая дискуссия по поводу проекта одного из участников, которая переросла в спонтанный сеанс публичного код ревью от Глеба (одного из участников GoGetPodcast).
В итоге автор проекта получил очень ценный фидбэк, а мы получили крутой контент💻
#video #codereview
https://youtu.be/oqBTz3E19GA
Недавно в сообществе Gopher Club разгорелась жаркая дискуссия по поводу проекта одного из участников, которая переросла в спонтанный сеанс публичного код ревью от Глеба (одного из участников GoGetPodcast).
В итоге автор проекта получил очень ценный фидбэк, а мы получили крутой контент
#video #codereview
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Публичное Code Review Go-проекта
Разбираем проект одно из участников нашего сообщества.
Обсуждаемый проект: https://github.com/bagardavidyanisntreal/portal
Статьи, о которых упоминал Глеб: https://research.swtch.com/mm
🗣 Наш чат Gopher Club: https://t.me/+zsSZ63wEJDs3NGVi
👾 Мой Telegram…
Обсуждаемый проект: https://github.com/bagardavidyanisntreal/portal
Статьи, о которых упоминал Глеб: https://research.swtch.com/mm
🗣 Наш чат Gopher Club: https://t.me/+zsSZ63wEJDs3NGVi
👾 Мой Telegram…
Golang Дайджест
Какой вам кажется более простым, читаемым, понятным? Ниже будет голосование. Либо можете предложить свой вариант в комментариях к этому посту. Обсуждаем только кодстайл, а не адекватность кода в целом
Какие вариант лучше?
Anonymous Poll
69%
Option 1
23%
Option 2
3%
Другой вариант, напишу в комментах
5%
Не знаю / Посмотреть ответы
Options vs Builder Pattern
https://medium.com/@MTrax/golang-options-vs-builder-pattern-4123bfcc3c5c
Автор статьи рассматривает два паттерна для создания сложных объектов с опциональными параметрами - Options Pattern и Builder Pattern, их преимущества, недостатки и примеры реализации.
Options Pattern
Пример использования:
- Легкость использования
- Читаемость кода
- Более краткий и компактный код
Минусы:
- Может стать громоздким в использовании
- Меньше гибкость
Builder Pattern
Пример использования:
- Четкое разделение конструкции объекта от его представления
- Гибкость: позволяет создавать разные представления объекта с одним процессом конструкции
- Легко добавлять новые параметры
Минусы:
- Более более сложная и многословная реализация
- Больше абстракций
- Может быть избыточным
————
Как обычно, выбор между Options и Builder зависит от специфических потребностей вашего проекта
#golang #patterns #english
https://medium.com/@MTrax/golang-options-vs-builder-pattern-4123bfcc3c5c
Автор статьи рассматривает два паттерна для создания сложных объектов с опциональными параметрами - Options Pattern и Builder Pattern, их преимущества, недостатки и примеры реализации.
Options Pattern
Пример использования:
pizza := NewPizza(Плюсы:
WithDough("Regular"),
WithSauce("Tomato"),
WithCheese("Mozzarella"),
WithToppings([]string{"Pepperoni", "Olives", "Mushrooms"}),
)
- Легкость использования
- Читаемость кода
- Более краткий и компактный код
Минусы:
- Может стать громоздким в использовании
- Меньше гибкость
Builder Pattern
Пример использования:
builder := NewConcretePizzaBuilder()Метод Construct:
director := NewDirector(builder)
pizza := director.Construct()
func (d *Director) Construct() *Pizza {Плюсы:
return d.builder.
SetDough("Thin Crust").
SetSauce("Tomato").
SetCheese("Mozzarella").
SetToppings([]string{"Mushrooms", "Olives", "Onions"}).
Build()
}
- Четкое разделение конструкции объекта от его представления
- Гибкость: позволяет создавать разные представления объекта с одним процессом конструкции
- Легко добавлять новые параметры
Минусы:
- Более более сложная и многословная реализация
- Больше абстракций
- Может быть избыточным
————
Как обычно, выбор между Options и Builder зависит от специфических потребностей вашего проекта
#golang #patterns #english
Medium
Golang — Options vs Builder Pattern
When it comes to creating complex objects in Golang, two patterns are commonly used: the Options pattern and the Builder pattern. Both…
Каким аргументом вы передаёте логгер?
К примеру, контекст принято передавать 1-м параметром. А с логгером четкого соглашения нет. Примеры: 1) `NewService(ctx, log, arg1, arg2)` 2) `NewService(ctx, arg1, arg2, log)`
К примеру, контекст принято передавать 1-м параметром. А с логгером четкого соглашения нет. Примеры: 1) `NewService(ctx, log, arg1, arg2)` 2) `NewService(ctx, arg1, arg2, log)`
Anonymous Poll
30%
Как в примере (1) - т.е. после контекста, либо 1-м если ctx нет
26%
Как в примере (2) - т.е. последним
11%
Не задумываюсь и делаю везде по разному
7%
Другое, напишу в комментах
25%
Не знаю / посмотреть ответы
Какой тип данных используется внутри каналов Go для организации и управления буфером?
Anonymous Quiz
10%
Динамический массив (Dynamic Array)
19%
Очередь на связанных списках (Linked List Queue)
58%
Кольцевой буфер (Circular Buffer)
13%
Очередь на массивах (Array Queue)
Golang Дайджест
Какой тип данных используется внутри каналов Go для организации и управления буфером?
Если хотите глубже погрузиться во внутреннее устройство каналов, напомню про видео с полным разбором этой темы
Результаты опроса показали, что этот ролик всё ещё актуален💻
Результаты опроса показали, что этот ролик всё ещё актуален
Please open Telegram to view this post
VIEW IN TELEGRAM
Defer your mutex Unlocks
https://www.ribice.ba/defer-mutex-unlocks/
Очень короткая статейка минут на 5 о том, почему нужно вызывать mutex.Unlock() именно в defer
У автора случилась классическая история: у них была функция, окруженная Mutex Lock / Unlock. Она не должна была паниковать, но внезапно делала это. Поэтому до Unlock дело не доходило и мьютекст оставался залоченным.
Наглядней всего проблему демонстрирует код:
От себя добавлю: в большинстве случаев лучше использовать Unlock именно в defer. Да, это создает некоторый оверхед по производительности, зато спасает от описанных выше фэйлов. Если у вас нет необходимости тонкой оптимизации, то лучше не рисковать.
Кроме того, это довольно простой случай, а чаще бывает сложнее - когда между Lock / Unlock происходит несколько вызовов, и часть из них могут вернуть ошибку. В таком случае в 99.9% случаев нужно использовать именно defer, иначе вероятность багов многократно вырастает.
#article #english #mutex
https://www.ribice.ba/defer-mutex-unlocks/
Очень короткая статейка минут на 5 о том, почему нужно вызывать mutex.Unlock() именно в defer
У автора случилась классическая история: у них была функция, окруженная Mutex Lock / Unlock. Она не должна была паниковать, но внезапно делала это. Поэтому до Unlock дело не доходило и мьютекст оставался залоченным.
Наглядней всего проблему демонстрирует код:
defer func() {После фикса:
if err := recover(); err != nil {
fmt.Println("Recovered") // mutex.Unlock() missed!
}
}()
mutex.Lock()
functionCallThatPanics()
mutex.Unlock()
defer func() {————
if err := recover(); err != nil {
fmt.Println("Recovered")
}
}()
m.Lock()
defer m.Unlock() // will be called even after panic
functionCallThatPanics()
От себя добавлю: в большинстве случаев лучше использовать Unlock именно в defer. Да, это создает некоторый оверхед по производительности, зато спасает от описанных выше фэйлов. Если у вас нет необходимости тонкой оптимизации, то лучше не рисковать.
Кроме того, это довольно простой случай, а чаще бывает сложнее - когда между Lock / Unlock происходит несколько вызовов, и часть из них могут вернуть ошибку. В таком случае в 99.9% случаев нужно использовать именно defer, иначе вероятность багов многократно вырастает.
#article #english #mutex
От чего зависит скорость разработчика? / GoGetPodcast №9
https://youtu.be/RxkX0NapCDw
Что обсуждается:
- Факторы, которые влияют на скорость работы разработчика
- Цена и вероятность ошибок во время разработки
- Почему Линус так быстро пишет код? Почему Star Citizen никогда не выйдет?
и др.
Состав:
- Николай Тузов
- Глеб Яльчик - тех. директор компании Gaijin
- Даниил Подольский - Microavia.com
————
Go Get Podcast - подкаст про Go и всё что с ним связано
#gogetpodcast #podcast
https://youtu.be/RxkX0NapCDw
Что обсуждается:
- Факторы, которые влияют на скорость работы разработчика
- Цена и вероятность ошибок во время разработки
- Почему Линус так быстро пишет код? Почему Star Citizen никогда не выйдет?
и др.
Состав:
- Николай Тузов
- Глеб Яльчик - тех. директор компании Gaijin
- Даниил Подольский - Microavia.com
————
Go Get Podcast - подкаст про Go и всё что с ним связано
#gogetpodcast #podcast
YouTube
Скорость разработки и цена ошибки разработчика / GoGetPodcast №9
Обсуждаем скорость работы разработчика, цену и вероятность ошибок во время разработки и др.
Состав:
- Николай Тузов
- Глеб Яльчик - тех. директор компании Gaijin
- Даниил Подольский - Microavia.com
Тайминги:
0:00 Вступление и представление гостей
1:35…
Состав:
- Николай Тузов
- Глеб Яльчик - тех. директор компании Gaijin
- Даниил Подольский - Microavia.com
Тайминги:
0:00 Вступление и представление гостей
1:35…
Forwarded from Николай Тузов
Оригинальный пост будет обновляться для сохранения актуальности. Репосты при этом не обновляются, поэтому не забывайте проверять оригинал.
Must have, нестареющая классика:
- A Tour of Go - ресурс, с которого 100% надо начинать. Тут вас просто и быстро проведут по всем важным аспектам языка. Прохождение займёт ~4 часа часа, и после этого вы будете знать практически всё, что необходимо
- Effective Go - здесь вас научат не просто писать код, а делать это красиво и эффективно.
- Книга "Язык программирования Go", Донован Алан А. А., Керниган Брайан У - отличная книга, в которой подробно разобрано практически всё, что есть в языке, приведены примеры различных подводных камней и нюансов. Часто в книге объясняется, почему авторы языка сделали именно так, а не иначе. Авторы известные и авторитетные разработчики.
Другие интересные способы начать изучение:
- Go by Example - отличный набор простых и полезных примеров с комментариями
- Learn X in Y minutes – оригинальный и интересный способ изучения языка - вам показывают большой кусок кода с комментариями, который быстро познакомит вас со всеми основами
- Go developer roadmap, о котором я уже писал
Другие ресурсы:
- Николай Тузов - GoLang - YouTube канал с такими же ультимативными уроками по Go ☺️
- Golang Дайджест - ТГ-канал с регулярными подборками материалов по Go
- Go 101 - книга, сосредоточенная на синтаксисе / семантике языка, и на вещах связанных с runtime. Подойдет и новичкам, и опытным разработчикам - для более глубокого понимания.
- How to Write Go Code - пост с рекомендациями по написанию кода от авторов языка
- Go или не Go? от Умпутуна из Radio-T
Если вы знаете другие крутые материалы, сервисы и т.п., пишите в комментариях. Самое интересное я буду добавлять в пост.
#golang #guides #подборки
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему нельзя взять указатель на элемент Map?
Anonymous Quiz
4%
Из-за особенностей реализации сборки мусора (GC)
21%
Map в Go является мутабельной структурой, т.е. данные могут измениться
4%
Из-за потенциальной несовместимости типов данных
71%
Адрес элемента может измениться при эвакуации (рехешировании)
Golang Дайджест
Почему нельзя взять указатель на элемент Map?
Ответ с объяснением можете посмотреть тут: https://youtu.be/P_SXTUiA-9Y?t=1719 (ссылка с нужным таймингом).
Ну и само видео целиком будет полезно, если хотите разобраться во внутреннем устройстве типа Map.
Ну и само видео целиком будет полезно, если хотите разобраться во внутреннем устройстве типа Map.
YouTube
Как на самом деле устроен тип Map в Golang? | Golang под капотом
В этом видео мы в деталях разберемся, как устроен тип Map в Go и сможем ответить на некоторые очень интересные вопросы:
- зачем заранее аллоцировать память под мапы?
- почему порядок их обхода случайный?
- почему нельзя взять ссылку на элемент мапы?…
- зачем заранее аллоцировать память под мапы?
- почему порядок их обхода случайный?
- почему нельзя взять ссылку на элемент мапы?…
Clean Env - минималистичная библиотека для работы с конфигурацией
https://github.com/ilyakaznacheev/cleanenv
Чаще всего для конфигурации в Go используют spf13/viper, наверняка вы о нём слышали.
Но если вам хочется минималистичности и простоты, Clean Env вам понравится. Тут нет ничего лишнего, а значит легко разобраться, сложно сломать. При этом, всё необходимое тут имеется, в том числе поддержка популярных форматов конфига: yaml, json, toml, env.
Особенно мне понравилась работа с тегами структуры, в которую будет парситься конфиг:
-
-
-
- и др.
У Viper не все из этого есть, а для задания имени параметров нужно использовать неочевидный тег -
————
Кстати, если вам вдруг не понравился ни Viper, ни Clean Env, можете посмотреть в сторону koanf, тоже интересный и популярный вариант.
————
💻 Расскажите в комментариях, какими библиотеками для конфигурации вы пользовались, какие вам больше понравились и почему
#package #configuration
https://github.com/ilyakaznacheev/cleanenv
Чаще всего для конфигурации в Go используют spf13/viper, наверняка вы о нём слышали.
Но если вам хочется минималистичности и простоты, Clean Env вам понравится. Тут нет ничего лишнего, а значит легко разобраться, сложно сломать. При этом, всё необходимое тут имеется, в том числе поддержка популярных форматов конфига: yaml, json, toml, env.
Особенно мне понравилась работа с тегами структуры, в которую будет парситься конфиг:
-
env-default
- дефолтные значения для параметров-
yaml
/ json
/ env
- имена параметров для парсинге из разных источников-
env-required
- отмечает поле как обязательное- и др.
У Viper не все из этого есть, а для задания имени параметров нужно использовать неочевидный тег -
mapstructure
.————
Кстати, если вам вдруг не понравился ни Viper, ни Clean Env, можете посмотреть в сторону koanf, тоже интересный и популярный вариант.
————
#package #configuration
Please open Telegram to view this post
VIEW IN TELEGRAM
slog - новый логгер в стандартной библиотеке
В версии Go 1.21 в stdlib будет добавлен пакет для работы с логами - slog. Сейчас его можно попробовать в виде стороннего пакета в golang/x.
Что почитать, чтобы быть в курсе:
- Дискуссия на гитхабе, с которой всё началось
- Анонс дизайн-документа slog
- Proposal: Structured Logging, который стал результатом дискуссии
- Подробнейший разбор slog - очень советую почитать для понимания мотивации и решения
- Ещё одна статья на эту тему
————
Напомню, чего не хватало в стандартном логгере - log:
- Нет уровней логирования, например - Info, Error, Debug и др. Без этого логи сложнее фильтровать, разделять по важности.
- Нет поддержки structured logs - мы можем выводить только plain text, и не можем использовать формат, который легко парсится разными сервисами (kibana, grafana и т.п.), например - JSON
- Нельзя добавить доп. поля для контекста: userID, traceID и т.п.
и др.
#logs #package #news
В версии Go 1.21 в stdlib будет добавлен пакет для работы с логами - slog. Сейчас его можно попробовать в виде стороннего пакета в golang/x.
Что почитать, чтобы быть в курсе:
- Дискуссия на гитхабе, с которой всё началось
- Анонс дизайн-документа slog
- Proposal: Structured Logging, который стал результатом дискуссии
- Подробнейший разбор slog - очень советую почитать для понимания мотивации и решения
- Ещё одна статья на эту тему
————
Напомню, чего не хватало в стандартном логгере - log:
- Нет уровней логирования, например - Info, Error, Debug и др. Без этого логи сложнее фильтровать, разделять по важности.
- Нет поддержки structured logs - мы можем выводить только plain text, и не можем использовать формат, который легко парсится разными сервисами (kibana, grafana и т.п.), например - JSON
- Нельзя добавить доп. поля для контекста: userID, traceID и т.п.
и др.
#logs #package #news
pkg.go.dev
slog package - golang.org/x/exp/slog - Go Packages
Package slog provides structured logging, in which log records include a message, a severity level, and various other attributes expressed as key-value pairs.
Подкаст про GameDev на Go
Искандер Шарипов запустил подкаст про разработку разработку игр на Go. Первый эпизод уже доступен на Mave:
https://gg.mave.digital/ep-1
Приглашённый гость: Андрей Апанасик.
За новостями подкаста можно следить тут.
О чем выпуск:
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
#gamedev #podcast
Искандер Шарипов запустил подкаст про разработку разработку игр на Go. Первый эпизод уже доступен на Mave:
https://gg.mave.digital/ep-1
Приглашённый гость: Андрей Апанасик.
За новостями подкаста можно следить тут.
О чем выпуск:
*
00:00
- Интро, представляем ведущих*
10:10
- Как Андрей вкатился в геймдев*
11:50
- Стартап Андрея (balancy.co)*
17:50
- Маппинг схемы между админкой balancy и игрой*
19:60
- Визуальная админка в balancy для удобства геймдизайнеров*
21:50
- Какие движки поддерживает balancy*
22:20
- Любимые инструменты разработки игр Андрея*
29:10
- О JSON в Unity*
30:50
- Стратегия развития Unity*
35:10
- Сколько монобехов - слишком много?*
40:10
- CGo в игрушках на Go*
45:20
- Некоторые плюсы и минусы особенностей Go в геймдеве*
48:20
- ECS в Go и Unity (и немного про Factorio)*
1:09:50
- Особенности рендеринга в Ebitengine и многопоточка в играх на Go*
1:19:50
- Говорим о Nakama (open source game server, написанный на Go)*
1:26:35
- Сетевой код для игр на Go, headless сборки на Ebitengine и Unity*
1:32:30
- Платформы, под которые можно собирать игры на Ebitengine*
1:37:40
- В какие игрушки играет Апанасик#gamedev #podcast
Давайте обсудим, книги по Go
Расскажите, что вы читали в последнее время, и что из этого вам понравилось? Желательно, чтобы это были свежие и актуальные книги.
А если ещё и напишете комментарий, то коллеги будут вам особенно благодарны: что понравилось / не понравилось, о чем в целом книга, стоит ли обратить на неё внимание, почему стоит?
Про must have "Язык программирования Go" Кернигана не пишем, про него и так все знают❤️ Да и она уже не очень свежая.
💻 Скидывать электронные копии книг в комментариях нельзя
#discussion #books
Расскажите, что вы читали в последнее время, и что из этого вам понравилось? Желательно, чтобы это были свежие и актуальные книги.
А если ещё и напишете комментарий, то коллеги будут вам особенно благодарны: что понравилось / не понравилось, о чем в целом книга, стоит ли обратить на неё внимание, почему стоит?
Про must have "Язык программирования Go" Кернигана не пишем, про него и так все знают
#discussion #books
Please open Telegram to view this post
VIEW IN TELEGRAM
В каких случаях вы считаете правильным использование именованных значений, возвращаемых функциями, т.е.:
`func myFunc() (x int, y int, z int) { ... }` Можно выбрать несколько вариантов. Также делитесь своим мнение в комментах.
`func myFunc() (x int, y int, z int) { ... }` Можно выбрать несколько вариантов. Также делитесь своим мнение в комментах.
Anonymous Poll
35%
В случае использования возвращаемого значения в defer
37%
Когда без имени непонятно, что именно возвращает функция
12%
Всегда когда есть что возвращать - сэкономим на строчках с объявлением переменных
20%
Никогда, я против этой конструкции!
1%
Свой вариант (напишу в комментах)
24%
Не знаю / Посмотреть ответы
Ваше мнение про пустой return? Т.е.:
func myFunc() (x int, y int) { x, y = 1, 2; return }
func myFunc() (x int, y int) { x, y = 1, 2; return }
Anonymous Poll
34%
Против! Ни в каких случаях так не делать!
12%
Иногда допустимо (приведите примеры в комментах)
21%
Это вкусовщина - если нравится, используйте
3%
Часто это допустимо, но не всегда (приведите примеры в комментах)
4%
Делаю так всегда, если есть возможность
5%
Впервые вижу такую конструкцию..
21%
Не знаю / Посмотреть ответы
Golang Дайджест
Давайте обсудим, книги по Go Расскажите, что вы читали в последнее время, и что из этого вам понравилось? Желательно, чтобы это были свежие и актуальные книги. А если ещё и напишете комментарий, то коллеги будут вам особенно благодарны: что понравилось /…
Обсудим книги для разработчиков
В прошлом посте я предложил рассказать вам про книги по Go, и вы в комментах просили написать аналогичный для обсуждения более общих книг.
Расскажите, что вы посоветуете почитать Go-разработчикам, помимо литературы по Go?
Как и в прошлый раз, огромный жирный лайк тем, кто не поленится и напишет развернутый комментарий к своей книге / подборке: что понравилось / не понравилось, о чем в целом книга, почему стоит обратить на неё внимание?
💻 Скидывать электронные копии книг в комментариях нельзя
————
p.s. За фото спасибо Алексею Акуловичу❤️
#discussion #books
В прошлом посте я предложил рассказать вам про книги по Go, и вы в комментах просили написать аналогичный для обсуждения более общих книг.
Расскажите, что вы посоветуете почитать Go-разработчикам, помимо литературы по Go?
Как и в прошлый раз, огромный жирный лайк тем, кто не поленится и напишет развернутый комментарий к своей книге / подборке: что понравилось / не понравилось, о чем в целом книга, почему стоит обратить на неё внимание?
————
p.s. За фото спасибо Алексею Акуловичу
#discussion #books
Please open Telegram to view this post
VIEW IN TELEGRAM