Forwarded from Selectel Team
Как дебажить concurrency-код в Go?
Сергей Петров, разработчик IAM, собрал инструменты, которые вам для этого пригодятся.
Неочевидности в Go, завязка библиотек на процессор, скедулинг горутин — обо всем этом смотрите в докладе!
Сергей Петров, разработчик IAM, собрал инструменты, которые вам для этого пригодятся.
Неочевидности в Go, завязка библиотек на процессор, скедулинг горутин — обо всем этом смотрите в докладе!
👍35
Шахматный движок на Go
https://github.com/rbw317/chess_go
На мой взгляд, в первую очередь, проект интересен как объект для изучения - движок не самый умный, но и код относительно простой.
Есть простенький консольный интерфейс и полноценный веб-фронтэнд. Демку с веб-версией можно потыкать тут.
Также проект может быть интересен тем, кто хочет потренироваться в написании интерфейсов на разных технологиях. К примеру, можете написать для него оболочку на том же Ebitengine.
#go_project
https://github.com/rbw317/chess_go
На мой взгляд, в первую очередь, проект интересен как объект для изучения - движок не самый умный, но и код относительно простой.
Есть простенький консольный интерфейс и полноценный веб-фронтэнд. Демку с веб-версией можно потыкать тут.
Также проект может быть интересен тем, кто хочет потренироваться в написании интерфейсов на разных технологиях. К примеру, можете написать для него оболочку на том же Ebitengine.
#go_project
GitHub
GitHub - rbw317/chess_go: Chess engine written in Go
Chess engine written in Go. Contribute to rbw317/chess_go development by creating an account on GitHub.
🔥8
GPT бот для работы с документацией Go
https://eli.thegreenplace.net/2023/retrieval-augmented-generation-in-go/
Как быть, если вы хотите спросить у GPT бота что-то по свежей документации Go, но его базы сильно устарели?
Проблему можно решить с помощью Retrieval Augmented Generation (RAG), и Eli Bendersky в этой статье рассказывает как это делается. Ну и вкратце рассказывает, что такое RAG.
Если интересен только код, вот репозиторий этого проекта.
Пример ответа бота про вопрос о GOTOOLCHAIN (переменная окружения, которая появилась в Go 1.21):
#GPT #article #english
https://eli.thegreenplace.net/2023/retrieval-augmented-generation-in-go/
Как быть, если вы хотите спросить у GPT бота что-то по свежей документации Go, но его базы сильно устарели?
- You: what is the latest released version of the Go programming language?
- ChatGPT: As of my last update in April 2023, the latest stable version of Go
was 1.20.
- You: ...👌
Проблему можно решить с помощью Retrieval Augmented Generation (RAG), и Eli Bendersky в этой статье рассказывает как это делается. Ну и вкратце рассказывает, что такое RAG.
Если интересен только код, вот репозиторий этого проекта.
Пример ответа бота про вопрос о GOTOOLCHAIN (переменная окружения, которая появилась в Go 1.21):
In Go, `GOTOOLCHAIN` is an environment variable that determines which Go
toolchain version should be used. The value of `GOTOOLCHAIN` can be set to
various options:
1. `local`: This indicates that the bundled Go toolchain should be used.
2. `<name>`: This specifies a specific Go toolchain version that should
be used. If a binary with that name is found in the system PATH, it will be
used; otherwise, the `go` command will download and use the specified Go
toolchain.
3. `<name>+auto` or `<name>+path`: This tells the `go` command to
select and run a newer Go version as needed. It will consult the
`toolchain` and `go` lines in the current workspace's `go.work` file (or
the main module's `go.mod` file if there is no workspace) to determine
which toolchain version to use. If a newer version is specified in those
files, it will be used; otherwise, it will fallback to the default Go
toolchain.
Overall, `GOTOOLCHAIN` is used to specify the specific Go toolchain version or
the selection process of a newer Go version that should be used by the `go`
command.
#GPT #article #english
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥3
Как писать параллельный код - основы
https://habr.com/ru/companies/timeweb/articles/770912/
Очень хорошая статья, в которой простым языком на простеньких примерах рассказываются основы работы с параллельным кодом:
- Зачем это нужно
- Как и почему нельзя писать параллельный код
- Какие издержки распараллеливания мы имеем (спойлер - код становится намного сложнее и опасней)
и др.
Если вы не ещё сталкивались с подобными задачами, рекомендую ознакомиться.
#article #concurrency
https://habr.com/ru/companies/timeweb/articles/770912/
Очень хорошая статья, в которой простым языком на простеньких примерах рассказываются основы работы с параллельным кодом:
- Зачем это нужно
- Как и почему нельзя писать параллельный код
- Какие издержки распараллеливания мы имеем (спойлер - код становится намного сложнее и опасней)
и др.
Если вы не ещё сталкивались с подобными задачами, рекомендую ознакомиться.
#article #concurrency
Хабр
Здоровая конкуренция в GO. Главное не перехитрить самого себя
Несколько лет назад я прочитал статью о параллелизации в GO и ничего не понял – я тогда только начинал программировать на этом языке. Но размышления автора мне очень понравились – они подкреплялись...
👍20🔥5
❤17🔥5👍3
Почему `nil error value` не равно nil?
Судя по результатам опроса выше, не все понимают эту механику.
Вот официальный ответ разработчиков на этот вопрос.
Также хорошее объяснение с более сложным примером вы найдёте в книге "Язык программирования Go" Донован А. Керниган Б. (стр. 224 - глава 7, Интерфейсы)
#go_traps
Судя по результатам опроса выше, не все понимают эту механику.
Вот официальный ответ разработчиков на этот вопрос.
Также хорошее объяснение с более сложным примером вы найдёте в книге "Язык программирования Go" Донован А. Керниган Б. (стр. 224 - глава 7, Интерфейсы)
#go_traps
go.dev
Frequently Asked Questions (FAQ) - The Go Programming Language
👍14❤3
Подводные камни Go
Расскажите, какие наиболее значимые и популярные подводные камни и грабли Go вы знаете? Если есть истории реальных фэйлов, связанных с этим, будет ещё лучше.
"nil error value", передача слайса по значению и т.п. Пусть даже самые банальные и общеизвестные.
Если соберём хорошую подборку, я готов сделать полноценный ролик на эту тему на своём канале.
Расскажите, какие наиболее значимые и популярные подводные камни и грабли Go вы знаете? Если есть истории реальных фэйлов, связанных с этим, будет ещё лучше.
"nil error value", передача слайса по значению и т.п. Пусть даже самые банальные и общеизвестные.
Если соберём хорошую подборку, я готов сделать полноценный ролик на эту тему на своём канале.
👍30
Если вам предстоит работать с проектами на gRPC, то этот гайд позволит в максимально сжатые сроки покрыть львинную долю того, чему необходимо научиться.
Он доступен в двух вариантах:
- Видео на YouTube
- Статья на Хабре
Сервис пишется с нуля, попутно затрагивается множество аспектов:
- Правильная архитектура проекта
- Как писать ProtoBuf контракты, генерировать по ним код
- Как полноценно тестировать свой сервис, написание функциональных тестов
- Как правильно работать с паролями и токенами авторизации
- Взаимодействие между сервисами
- Работа с миграциями
И многое другое.
#guide #grpc
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Пишем gRPC сервис на Go - Сервис авторизации / УЛЬТИМАТИВНЫЙ гайд
Пишем полноценный gRPC сервис с современной архитектурой. Также:
- Напишем контракт protobuf, разберемся с кодогенерацией
- Научимся работать с ошибками и логами
- Настроим миграции для БД
- Настроим автоматический деплой через GitHub Actions, напишем для…
- Напишем контракт protobuf, разберемся с кодогенерацией
- Научимся работать с ошибками и логами
- Настроим миграции для БД
- Настроим автоматический деплой через GitHub Actions, напишем для…
21🔥54👍18❤8🫡1
Исследование Go-разработчиков от авторов языка
https://go.dev/blog/survey2023-h2-results
Основные результаты:
- Разработчики Go заявили, что они больше заинтересованы в инструментах AI/ML, которые улучшают качество кода, который они пишут, а не пишут код для них. Круглосуточно доступный "ревьюер" может стать одной из наиболее полезных фич ИИ.
- Эксперимент с шаблонами проектов (gonew), похоже, решает критические проблемы Go-разработчиков (особенно новичков в Go). Основываясь на этих результатах, можно сказать что gonew может существенно снизить порог входа в Go для новичков.
- 3/4 респондентов работают над программным обеспечением на Go, которое также использует облачные сервисы; это свидетельствует о том, что разработчики рассматривают Go как язык для современной облачной разработки.
- Настроение разработчиков по отношению к Go остается крайне позитивным: 90% респондентов опроса заявили, что удовлетворены работой с Go в течение предыдущего года.
#survey #go_official
https://go.dev/blog/survey2023-h2-results
Основные результаты:
- Разработчики Go заявили, что они больше заинтересованы в инструментах AI/ML, которые улучшают качество кода, который они пишут, а не пишут код для них. Круглосуточно доступный "ревьюер" может стать одной из наиболее полезных фич ИИ.
- Эксперимент с шаблонами проектов (gonew), похоже, решает критические проблемы Go-разработчиков (особенно новичков в Go). Основываясь на этих результатах, можно сказать что gonew может существенно снизить порог входа в Go для новичков.
- 3/4 респондентов работают над программным обеспечением на Go, которое также использует облачные сервисы; это свидетельствует о том, что разработчики рассматривают Go как язык для современной облачной разработки.
- Настроение разработчиков по отношению к Go остается крайне позитивным: 90% респондентов опроса заявили, что удовлетворены работой с Go в течение предыдущего года.
#survey #go_official
go.dev
Go Developer Survey 2023 H2 Results - The Go Programming Language
What we learned from our 2023 H2 developer survey
👍36🔥10❤6🤔1
Открытое собеседование Senior Go разработчика
https://youtu.be/GD0iHLucYdU
Самые популярные интервьюеры русскоязычного Go сообщества - Даниил Подольский (Yadro) и Владимир Балун (Yandex) провели собеседование сеньора на канале Николая Тузова.
Собеседование состоит из двух частей - общие вопросы по знаменитому опроснику Даниила и лайв-кодинг с Владимиром.
В роли кандидата выступил Антон Зиновьев - разработчик и техлид из компании Gaijin.
#собеседование
https://youtu.be/GD0iHLucYdU
Самые популярные интервьюеры русскоязычного Go сообщества - Даниил Подольский (Yadro) и Владимир Балун (Yandex) провели собеседование сеньора на канале Николая Тузова.
Собеседование состоит из двух частей - общие вопросы по знаменитому опроснику Даниила и лайв-кодинг с Владимиром.
В роли кандидата выступил Антон Зиновьев - разработчик и техлид из компании Gaijin.
#собеседование
YouTube
Собеседование Senior Go-разработчика / Даниил Подольский, Владимир Балун - Антон Зиновьев
Даниил Подольский и Владимир Балун проводят собеседование Senior GoLang разработчика - Антона Зиновьева. Интервью состоит из двух частей: общие вопросы и лайв-кодинг.
Канал Антона, на котором он проводит стримы с разработкой на Go: https://www.youtube.com/@laxcity…
Канал Антона, на котором он проводит стримы с разработкой на Go: https://www.youtube.com/@laxcity…
👍16🔥5❤3🤔2
Как устроена память в Go
https://habr.com/ru/companies/vk/articles/776766/
На мой взгляд, устройство памяти - это очень важная тема для тех, кто хочет лучше разбираться, как Go устроен под капотом. Сама статья читается легко и интересно, мне понравилось.
#article #memory
https://habr.com/ru/companies/vk/articles/776766/
На мой взгляд, устройство памяти - это очень важная тема для тех, кто хочет лучше разбираться, как Go устроен под капотом. Сама статья читается легко и интересно, мне понравилось.
#article #memory
Хабр
Потрошим golang: как устроена память
Привет, меня зовут Стас Иванкевич, и я работаю в VK Cloud над разработкой облачных сервисов в команде Data Masters. Сервисы, запрошенные клиентами, так или иначе должны развернуться в том виде, в...
👍34🔥6❤4🤯1
Go Tour на стероидах от ArdanLabs
https://www.ardanlabs.com/blog/2024/01/ultimate-go-tour.html
William Kennedy, известный нам по крутым гайдам по внутренностям Go, решил, что официальный Go Tour недостаточно хорош, и предлагает нам свою версию.
Что не нравилось:
- Официальный Тур не является всеобъемлющим как по количеству примеров, так и по содержанию, объясняющему эти примеры
- Содержание практически мгновенно переходит от новичка к эксперту
Вильям поколдовал и получилось это: tour.ardanlabs.com
Лучше оно или хуже - решать вам. Но оно точно стоит внимания.
Возможно, один из самых крутых аспектов этого нового тура заключается в том, что он не контролируется Google. Это дает проекту гибкость, позволяющую вовлечь в него сообщество.
#ardanlabs #go_tour
https://www.ardanlabs.com/blog/2024/01/ultimate-go-tour.html
William Kennedy, известный нам по крутым гайдам по внутренностям Go, решил, что официальный Go Tour недостаточно хорош, и предлагает нам свою версию.
Что не нравилось:
- Официальный Тур не является всеобъемлющим как по количеству примеров, так и по содержанию, объясняющему эти примеры
- Содержание практически мгновенно переходит от новичка к эксперту
Вильям поколдовал и получилось это: tour.ardanlabs.com
Лучше оно или хуже - решать вам. Но оно точно стоит внимания.
Возможно, один из самых крутых аспектов этого нового тура заключается в том, что он не контролируется Google. Это дает проекту гибкость, позволяющую вовлечь в него сообщество.
#ardanlabs #go_tour
Ardan Labs
Ultimate Go Tour
Ardan Labs is trusted by small startups and Fortune 500 companies to train their engineers and develop business software solutions and applications.
🔥41👍9❤7
Forwarded from Go Update
🎉 Состоялся релиз Go 1.22
Как-то буднично и без предварительных фанфар состоялся релиз новой версии языка. Изменений много, постараюсь остановится лишь на самых значимых:
— Расширение синтаксиса циклов for. Теперь можно писать
Вместо
Изменение приятное, уменьшающее число когнитивной нагрузки. Само изменение шло в довесок к итераторам, которые отложили до Go 1.23 (но которые можно попробовать уже сейчас).
— Изменение принципов создания переменных внутри объявления циклов. Об этом я писал вот тут, но если в кратце больше не нужна конструкция вида
— Итераторы доступны в экспериментальном режиме. Включить и поиграться можно через переменную окружения
—
— Переделали trace – и пакет и UI.
—
— Первый v2 пакет
— PGO (оптимизация использующая данные профилировщика) теперь генерирует еще более быстрый код. Обещают от 2% др 14% прироста производительности при использовании PGO.
— Оптимизации "встраивание функций" и "девиртуализатор" теперь работают совместно, что позволяет выполнять один после другого и обратно. Этого очень просили пользователи функций криптографических пакетов которые возвращают интерфейсы.
— Оптимизацию "встраивание функций" сделали еще более умной - теперь она пытается отработать внутри циклов и других горячих местах, и наоборот пытается не инлайнить в коде обработки паник. Но пока все это тоже в экспериментальном режиме. Попробовать можно через
— Из лично приятного: в пакет
На мой взгляд релиз в целом приятный, но половинчатый: многое из действительно интересных вещей скрыты за флагом
Полный список изменений как всегда тут.
Как-то буднично и без предварительных фанфар состоялся релиз новой версии языка. Изменений много, постараюсь остановится лишь на самых значимых:
— Расширение синтаксиса циклов for. Теперь можно писать
for i := range 10 {
println(i)
}
Вместо
for i := 0; i < 10; i++ {
println(i)
}
Изменение приятное, уменьшающее число когнитивной нагрузки. Само изменение шло в довесок к итераторам, которые отложили до Go 1.23 (но которые можно попробовать уже сейчас).
— Изменение принципов создания переменных внутри объявления циклов. Об этом я писал вот тут, но если в кратце больше не нужна конструкция вида
tt := tt
внутри циклов.— Итераторы доступны в экспериментальном режиме. Включить и поиграться можно через переменную окружения
GOEXPERIMENT=rangefunc
. Можно установить через go env -w GOEXPERIMENT=rangefunc
если не хочется каждый раз возится. В комплекте так-же идет пакет iter
который позволяет создавать pull итераторы из push. Почитать про все это от разработчиков языка можно тут.—
go test -cover
теперь корректно выводит 0% покрытия для пакетов где нет тестов, но есть исполняемый код. Для пакетов где нет go файлов или они содержат только структуры выводит старое [no test files]
.— Переделали trace – и пакет и UI.
—
net/http
роутер теперь поддерживает указание метода и паттерны. Про это расширение роутера было много статей и блогов, поэтому тут будет просто упоминание.— Первый v2 пакет
math/rand/v2
. Заменили Mitchell & Reeds LFSR
генератор rand.Source
случайных чисел на более современный и криптографически стойкий ChaCha8
. А сие значит, что его можно использовать для криптографических операций. Плюс он быстрее и жрет меньше памяти. Так-же есть PCG
генератор, который не криптографически стойкий, но еще быстрее. Кроме этого пакет получил дополнительные методы (в том числе дженерик функция rand.N
для работы с семейством int
типов, например time.Duration
).— PGO (оптимизация использующая данные профилировщика) теперь генерирует еще более быстрый код. Обещают от 2% др 14% прироста производительности при использовании PGO.
— Оптимизации "встраивание функций" и "девиртуализатор" теперь работают совместно, что позволяет выполнять один после другого и обратно. Этого очень просили пользователи функций криптографических пакетов которые возвращают интерфейсы.
— Оптимизацию "встраивание функций" сделали еще более умной - теперь она пытается отработать внутри циклов и других горячих местах, и наоборот пытается не инлайнить в коде обработки паник. Но пока все это тоже в экспериментальном режиме. Попробовать можно через
GOEXPERIMENT=newinliner
. Почитать тут.— Из лично приятного: в пакет
slices
добралась функция Concat
для соединения произвольного числа слайсов. Больше не нужно городить цепочку append
.На мой взгляд релиз в целом приятный, но половинчатый: многое из действительно интересных вещей скрыты за флагом
GOEXPERIMENT
, а часть вообще осталась ждать Go 1.23. Тем не менее обновится стоит, хотя-бы ради нового синтаксиса циклов for.Полный список изменений как всегда тут.
Telegram
Go Update
🆒 Fixing For Loops in Go 1.22
Рассказывая про счастливое далекое будущее, я часто забываю рассказать про хорошее (почти) настоящее. Но перед тем как начать, я задам вопрос: а что выведет следующая программа?
package main
import "fmt"
func main() {
var…
Рассказывая про счастливое далекое будущее, я часто забываю рассказать про хорошее (почти) настоящее. Но перед тем как начать, я задам вопрос: а что выведет следующая программа?
package main
import "fmt"
func main() {
var…
🔥55👍20❤11