Каким аргументом вы передаёте логгер?
К примеру, контекст принято передавать 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%
Другое, напишу в комментах
26%
Не знаю / посмотреть ответы
Какой тип данных используется внутри каналов 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)
22%
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
Forwarded from Усталый АйТишник
Ого, а вот это интересно! GoNB — экспериментальное ядро Go Notebook, которое позволяет запускать код Go в Jupyter Notebook и его вариациях (например, в Google Colab). В отличие от Go Playground и аналогов, которые позволяют запускать го код в онлайне, тут еще наследуются всякие интересные юпитер-ноутбуковские фишки, вроде вывода html, рисования графиков, прогрессбаров и т.п., т.е. можно создавать юпитеровский блокнот (как для Питона) – с описанием, примерами задачек и возможностью сразу проверить результат, может быть полезно для обучения, конспектов и т.д.
Репозиторий и инструкция
Там же есть пример ноутбука на гугл колабе
#GO
Репозиторий и инструкция
Там же есть пример ноутбука на гугл колабе
#GO
Forwarded from Николай Тузов
Таймауты HTTP Server в Go - как работают и зачем нужны
В стандартной библиотеке Go есть замечательный пакет
- ReadHeaderTimeout - время, отводимое на чтение заголовков запроса
- ReadTimeout - максимальная продолжительность чтения полного запроса, включая тело
- WriteTimeout - максимальное время ожидания до окончания записи ответа
- IdleTimeout - максимальное время ожидания следующего запроса, используется keep-alive
Чтобы лучше уложить в голове, как они используются, давайте вспомним, как сервер работает с входящими запросами:
- Борьба с Slowloris атаками: это тип атаки, при которой злоумышленник устанавливает соединение с сервером и отправляет запрос нуу оооочень медленно. Это может приводить к исчерпанию ресурсов сервера и его последующему отказу. Установка
- Отправка больших данных: возможно, клиенты отправляют нам что-то очень большое, и мы не хотим чтобы это заняло слишком много времени. В этом случае помогает
- Ограничение использования ресурсов: При большом количестве запросов, особенно в микросервисных архитектурах, установка
————
☁️ Если я где-то ошибся или был неточен, пожалуйста, напишите об этом в комментах, я всё поправлю
💻 Идея написания этого поста возникла во время записи ролика по REST API, в котором у меня не хватило времени на полноценное объяснение
#гайды #golang #http
В стандартной библиотеке Go есть замечательный пакет
net/http
, в котором есть структура http.Server
. Это основная структура для написания сервиса, обрабатывающего HTTP запросы. У http.Server
довольно много интересных параметров, но здесь нам интересны таймауты:- ReadHeaderTimeout - время, отводимое на чтение заголовков запроса
- ReadTimeout - максимальная продолжительность чтения полного запроса, включая тело
- WriteTimeout - максимальное время ожидания до окончания записи ответа
- IdleTimeout - максимальное время ожидания следующего запроса, используется keep-alive
Чтобы лучше уложить в голове, как они используются, давайте вспомним, как сервер работает с входящими запросами:
1. Подключение установленоЗачем нужно столько таймаутов?
|--- ReadHeaderTimeout (если установлен) ---|
2. Заголовки запроса получены
|--- ReadTimeout (если установлен) ---|
3. Тело запроса получено, начинается обработка запроса
4. Обработка завершена, сервер начинает отправлять ответ
|--- WriteTimeout (если установлен) ---|
5. Ответ полностью отправлен клиенту
|--- IdleTimeout (если установлен и соединение остается открытым) ---|
6. Если не было другого запроса в течение IdleTimeout, соединение закрывается
7. Если новый запрос получен до IdleTimeout, процесс начинается сначала с шага 2
- Борьба с Slowloris атаками: это тип атаки, при которой злоумышленник устанавливает соединение с сервером и отправляет запрос нуу оооочень медленно. Это может приводить к исчерпанию ресурсов сервера и его последующему отказу. Установка
ReadHeaderTimeout
и ReadTimeout
может помочь.- Отправка больших данных: возможно, клиенты отправляют нам что-то очень большое, и мы не хотим чтобы это заняло слишком много времени. В этом случае помогает
ReadTimeout
- Обратная ситуация - работа с ооочень медленными клиентами: Встречаются клиенты со слабым каналом, которые принимают наш ответ очень долго (например, некоторые устройства IoT или просто регионы со слабым интернет-покрытием). В этом случае, если не установить WriteTimeout
, сервер может ждать бесконечно долго, пытаясь отправить ответ, что может привести к исчерпанию ресурсов.- Ограничение использования ресурсов: При большом количестве запросов, особенно в микросервисных архитектурах, установка
IdleTimeout
помогает освободить ресурсы от долгоживущих соединений, которые больше не используются.————
#гайды #golang #http
Please open Telegram to view this post
VIEW IN TELEGRAM
Ультимативный гайд по созданию REST API сервера
Доступно в дух форматах:
- Видео на YouTube
- Статья на Хабре
В гайде очень подробно разбирается процесс создания REST API сервера на примере URL Shortener'а и его деплой на сервер через GitHub Actions.
На выходе получается готовый к использованию pet-проект (а не просто игрушка в стол):
- для него подобран актуальный http-роутер - chi
- ответственная работа с логами с использованием slog, которого мы очень ждём в stdlib
- разобраны различные виды тестов: unit-тесты, тесты хэндлеров и функциональные,
- объясняется, как настроить автоматический деплой через GitHub Actions
и др.
#гайды #rest_api
Доступно в дух форматах:
- Видео на YouTube
- Статья на Хабре
В гайде очень подробно разбирается процесс создания REST API сервера на примере URL Shortener'а и его деплой на сервер через GitHub Actions.
На выходе получается готовый к использованию pet-проект (а не просто игрушка в стол):
- для него подобран актуальный http-роутер - chi
- ответственная работа с логами с использованием slog, которого мы очень ждём в stdlib
- разобраны различные виды тестов: unit-тесты, тесты хэндлеров и функциональные,
- объясняется, как настроить автоматический деплой через GitHub Actions
и др.
#гайды #rest_api
YouTube
Пишем REST API сервис на Go - УЛЬТИМАТИВНЫЙ гайд
Пишем полноценный REST API сервис URL Shortener - это будет не игрушечный проект, а полностью готовый к использованию:
- выберем для него актуальный http-роутер: go-chi/chi
- Позаботимся о логах: slog
- Напишем тесты - unit-тесты, тесты хэндлеров и функциональные…
- выберем для него актуальный http-роутер: go-chi/chi
- Позаботимся о логах: slog
- Напишем тесты - unit-тесты, тесты хэндлеров и функциональные…
gonew - генератор каркасов проектов в стандартной библиотеке
https://go.dev/blog/gonew
Новость из официального блога авторов Go, совсем свежая
Авторы языка экспериментируют с новым пакетом - gonew, котрый умеет генерировать проект из указанного шаблона. Шаблоны представляют собой обычные пакеты, которые управляются через go mod, что очень удобно.
Сейчас gonew минималистичен, и авторы активно собирают фидбэк сообщества, чтобы понимать как его развивать дальше.
Как установить:
- hello: консольная утилита
- helloserver: HTTP-сервер
————
Мне очень нравится эта идея, т.к. это ещё один шаг в сторону стандартизации накапливющегося зоопарка, как и в случае slog. Сейчас у каждой компании (а то и у многих отдельных разработчиков) есть свой велосипед для генерации бойлерплэйтов, который далеко не тривиален. И выглядит это немного печально.
⚠️ Ещё раз подчеркиваю - пакет экспериментальный, а значит не спешите тащить его в свои проекты, особенно рабочие. Сейчас с ним можно просто поиграть, разобраться и написать фидбэк автрам, если есть что сказать
Расскажите в комментариях, что думаете об этой штуке?
#package #experimental
https://go.dev/blog/gonew
Новость из официального блога авторов Go, совсем свежая
Авторы языка экспериментируют с новым пакетом - gonew, котрый умеет генерировать проект из указанного шаблона. Шаблоны представляют собой обычные пакеты, которые управляются через go mod, что очень удобно.
Сейчас gonew минималистичен, и авторы активно собирают фидбэк сообщества, чтобы понимать как его развивать дальше.
Как установить:
go install golang.org/x/tools/cmd/gonew@latest
Как пользоваться:gonew golang.org/x/example/helloserver example.com/myserver
Примеры шаблонов от авторов:- hello: консольная утилита
- helloserver: HTTP-сервер
————
Мне очень нравится эта идея, т.к. это ещё один шаг в сторону стандартизации накапливющегося зоопарка, как и в случае slog. Сейчас у каждой компании (а то и у многих отдельных разработчиков) есть свой велосипед для генерации бойлерплэйтов, который далеко не тривиален. И выглядит это немного печально.
Расскажите в комментариях, что думаете об этой штуке?
#package #experimental
Please open Telegram to view this post
VIEW IN TELEGRAM
go.dev
Experimenting with project templates - The Go Programming Language
Announcing golang.org/x/tools/cmd/gonew, an experimental tool for starting new Go projects from predefined templates
Опрос для исследования рынка Go-разработчиков от DevCrowd
https://survey.alchemer.eu/s3/90588566/Go-2023
Исследование интересное, поэтому предлагаю и вам сделать свой небольшой вклад, а потом будем вместе ждать отчет с результатами.
Что хотят выяснить:
- Какие навыки для go-разработчиков самые важные
- Какие инструменты используются в работе
- Как попадают в профессию и куда из нее уходят
- Полезные для развития каналы, курсы и книги
#опрос
https://survey.alchemer.eu/s3/90588566/Go-2023
Исследование интересное, поэтому предлагаю и вам сделать свой небольшой вклад, а потом будем вместе ждать отчет с результатами.
Что хотят выяснить:
- Какие навыки для go-разработчиков самые важные
- Какие инструменты используются в работе
- Как попадают в профессию и куда из нее уходят
- Полезные для развития каналы, курсы и книги
#опрос
survey.alchemer.eu
Исследование рынка Go-разработчиков, 2023
Исследование рынка Go-разработчиков, 2023.
Forwarded from Go Update
Релиз Go 1.21
Вот и состоялся релиз новой версии Go. Кроме того, что указано здесь, у нас так-же появились:
- Довольной большой пакет slices: среди прочего содержит функции Min / Max, функцию сортировки и функцию поиска в сортированном слайсе. И больше не нужно писать страшные блоки вставки и удаления элементов из слайса.
- Пакет maps: по сравнению со слайсами как-то бедновато, но есть удобная функция копирования.
- Пакет cmp: содержит обьявление всех сравниваемых по порядку типов и две базовые функции для работы с ними. Нужно скорее для пакетов maps и slices, а так-же разработчикам библиотек с коллекциями.
- Profile-guide optimization (PGO - оптимизация основанная на данных профилировки) вышла из превью и теперь применяется всегда если присутствует файл
- Улучшение пакета context: теперь можно вешать функцию на отмену контекста (удобно когда вам нужно закрыть канал или прекратить чтение из сокета) и отвязать дочерний контекст от отмены родителя.
- При выводе очень глубоких стеков теперь показывают 50 самых верхних и 50 самых нижних фреймов (названий функции) вместо 100 самых верхних как это было ранее. Должно помочь с отладкой паник в рекурсивных функциях.
Вот и состоялся релиз новой версии Go. Кроме того, что указано здесь, у нас так-же появились:
- Довольной большой пакет slices: среди прочего содержит функции Min / Max, функцию сортировки и функцию поиска в сортированном слайсе. И больше не нужно писать страшные блоки вставки и удаления элементов из слайса.
- Пакет maps: по сравнению со слайсами как-то бедновато, но есть удобная функция копирования.
- Пакет cmp: содержит обьявление всех сравниваемых по порядку типов и две базовые функции для работы с ними. Нужно скорее для пакетов maps и slices, а так-же разработчикам библиотек с коллекциями.
- Profile-guide optimization (PGO - оптимизация основанная на данных профилировки) вышла из превью и теперь применяется всегда если присутствует файл
default.pgo
в директории main
пакета. Говорят, что благодаря ей удалось ускорить компилятор примерно на 6%.- Улучшение пакета context: теперь можно вешать функцию на отмену контекста (удобно когда вам нужно закрыть канал или прекратить чтение из сокета) и отвязать дочерний контекст от отмены родителя.
- При выводе очень глубоких стеков теперь показывают 50 самых верхних и 50 самых нижних фреймов (названий функции) вместо 100 самых верхних как это было ранее. Должно помочь с отладкой паник в рекурсивных функциях.
go.dev
Go 1.21 Release Notes - The Go Programming Language