Библиотека Go (Golang) разработчика
2.57K subscribers
252 photos
93 videos
29 files
327 links
Полезные материалы по всему, что может быть полезно Golang разработчику. По всем вопросам @evgenycarter
Download Telegram
Manning.gRPC.Microservices.in.Go.pdf
7.9 MB
gRPC Microservices in Go
Автор: Huseyin Babal (2023)

Книга научит вас создавать готовые к производству микросервисы с помощью Go и gRPC. В нем вы научитесь создавать эффективные API на Go, использовать gRPC для сетевого взаимодействия, а также развертываться в облаке и Kubernetes. Полезные примеры, в том числе полное веб-приложение для электронной коммерции, облегчают понимание каждой концепции. Вы также получите представление о тестировании, развертывании и эффективных практиках DevOps для микросервисов.

👉 @golang_lib
🎉2👍1
В чем разница между var x int = 2 и x := 2 в Go?

Результат тот же — переменная со значением 2. С помощью var x int = 2 мы устанавливаем тип переменной как целое число, а с помощью x := 2 мы позволяем Go самому определить тип.

👉 @golang_lib
👍3
Пишем поиск семантически похожих текстов (или товаров) за полчаса на Go и Postgres (pgVector)

Казалось бы, в посгресе и так есть неплохой полнотекстовый поиск (tsvector/tsquery), и вы из коробки можете проиндексировать ваши тексты, а потом поискать по ним. Но на самом деле это не совсем то, что нужно — такой поиск работает лишь по чётким совпадениям слов. Т.е. postgres не догадается, что "кошка гонится за мышью" — это довольно близко к "котёнок охотится на грызуна". Как же победить такую проблему?

https://habr.com/ru/companies/karuna/articles/809305/

👉 @golang_lib
👍4
Ошибки в языке Go — это большая ошибка

Я пишу на Go несколько лет, в Каруне многие вещи сделаны на нём; язык мне нравится своей простотой, незамысловатой прямолинейностью и приличной эффективностью. На других языках я писать не хочу.


Но сорян, к бесконечным if err != nil я до конца привыкнуть так и не смог.


Да-да, я знаю все аргументы: явное лучше неявного, язык Go многословен, зато понятен, и всё такое. Но, блин, на мой взгляд Го-вэй Го-вэю рознь.

https://habr.com/ru/companies/karuna/articles/830346/

👉 @golang_lib
2👍2👎2
Функция Join пакета errors конкатенирует список ошибок и возвращает ошибку, если хотя бы одна из переданных ошибок не nil.

Join возвращает nil, если все переданные ошибки равны nil.

https://pkg.go.dev/errors#Join

👉 @golang_lib
👍2
Fuzzing-тестирование. Практическое применение

В статье поделюсь своим опытом применения фаззинга для нагрузочных и интеграционных тестирований. Расскажу про генерацию текстов на армянском языке, тестирование SQL-запросов, а также можно ли использовать фаззер и unit-тестирование бок о бок, и какие баги нам удалось найти.

https://habr.com/ru/companies/wildberries/articles/808911/

👉 @golang_lib
Как ускорить программу, не переписав ни строчки кода: PGO для Go-разработчиков

Привет, я Кирилл Кузин — старший разработчик в компании Ви.Tech,являющейся IT-дочкой маркетплейса ВсеИнструменты.ру. Интернет-магазин стремительно растет и развивается. И сейчас мы имеем 4 кластера Kubernetes, в каждом из которых живут от 200 до 215 нод, а 1 млн пайплайнов в месяц выполняют свою работу. Ежедневно на наш сайт приходит почти 2 млн уникальных пользователей.

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

👉 @golang_lib
👍1
С нуля до продакшена: Путешествие Go в Google

Недавно Джереми Мейсон и Самир Аджмани написали о том, как Go стал одним из внутренних языков Google. В настоящее время Go занимает 8-е место в списке самых популярных языков программирования в мире и продолжает развиваться, поэтому людям интересно узнать о первых днях и о том, как мы к этому пришли.

Я решил написать об этом с точки зрения SRE, разработчика фреймворка и раннего последователя. Вся информация, которой я делюсь, относится к системам, которые Google уже задокументировал публично, поэтому я не думаю, что раскрываю какие-либо секреты. Есть некоторые важные части этой истории (например, envelope), о которых я не видел упоминаний в других местах, поэтому я не буду их обсуждать.

https://i-admin.cetico.org/posts/early-days-golang-google/

👉 @golang_lib
👍1
Анонимная сеть в 100 строк кода на Go

Прошло уже более года с тех пор как я написал статью - Анонимная сеть в 200 строк кода на Go. Пересмотрев её однажды осенним вечером я понял насколько всё в ней было ужасно - начиная с самого поведения логики кода и заканчивая его избыточностью. Сев за ноутбук и потратив от силы 20 минут у меня получилось написать сеть всего в 100 строк кода, используя лишь и только стандартную библиотеку языка.

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

👉 @golang_lib
👍3👎2
Две причины, по которым я предпочитаю передавать указатели на структуры в Go

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

Я здесь, чтобы немного оспорить эту точку зрения. Слишком многие дискуссии о том, использовать ли определённую конструкцию Go, становятся слишком техническими слишком быстро. Это может быть оправдано при разработке низкоуровневых системных компонентов с нулевым трением или массово масштабируемых веб-сервисов.

https://preslav.me/2024/04/23/two-reasons-to-prefer-struct-pointers-in-golang/

👉 @golang_lib
👍2👎2
Анонс исcледования рынка Go-разработчиков, 2024

Второй год подряд ребята из DevCrowd проводят большое исследование Go-разработчиков:

⚫️Что входит в обязанности и каких навыков не хватает
⚫️ Сколько в среднем зарабатывают в профессии в зависимости от грейда
⚫️Какие инструменты, сервисы наиболее популярны
⚫️Что читают, слушают и смотрят для профессионального развития.

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

Результаты опроса помогут вам сравнить свои ожидания с рыночными, построить план своего развития, и просто понять, что происходит с индустрией!

👉 Пройти опрос

Посмотреть результаты прошлого года
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👏1
Обработка ошибок в web apps не должна быть такой сложной

Зачем?
В процессе работы с Go я столкнулся с ещё одной проблемой — обработкой ошибок в хендлерах. Как можно сделать этот процесс удобным и эффективным для 150+ обработчиков? Как обеспечить консистентность и поддержку при обработке ошибок?

Разумеется, мои поиски палочки-выручалочки закончились ничем. Есть протокол RFS7807, есть библиотека, есть масса противоречивых статей - выбирай, но как будто чего-то не хватает... По существу статья ниже полностью не отвечает на мои вопросы, но в ней достаточно много примеров, и я думаю, она будет полезной. Это лишь повод/предложение поделиться вашими примерами успешных кейсов.

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

👉 @golang_lib
👍3👎2
Эволюция стандартной библиотеки Go с пакетом math/rand/v2

С момента выхода Go 1 в марте 2012 года изменения в стандартной библиотеке были ограничены обещанием совместимости Go. В целом, совместимость оказалась благом для пользователей Go, предоставив стабильную базу для производственных систем, документации, учебных пособий, книг и многого другого. Однако со временем мы осознали ошибки в оригинальных API, которые нельзя исправить без нарушения совместимости; в других случаях изменились лучшие практики и соглашения. Нам нужен план для внесения важных, но несовместимых изменений.

Этот пост в блоге посвящён новому пакету math/rand/v2 в Go 1.22 — первому пакету «v2» в стандартной библиотеке. Он вносит необходимые улучшения в API math/rand, но что ещё важнее, он служит примером того, как мы можем пересматривать другие пакеты стандартной библиотеки по мере возникновения необходимости.

(В Go math/rand и math/rand/v2 — это два разных пакета с разными путями для импорта. Go 1 и все последующие версии включают math/rand; Go 1.22 добавил math/rand/v2. Программа на Go может импортировать либо один из пакетов, либо оба.)

В этом посте обсуждаются конкретные причины изменений в math/rand/v2, а также общие принципы, которые будут руководить созданием новых версий других пакетов.

https://go.dev/blog/randv2

👉 @golang_lib
👍21
В чем разница между методами Time.Sub() и Time.Add() пакета time?

В пакете time языка Go методы Time.Sub() и Time.Add() служат для работы с временными значениями, но выполняют разные задачи:

1. Time.Sub():
- Используется для вычисления разницы между двумя временными значениями.
- Принимает другой объект типа Time и возвращает Duration, представляющую время, прошедшее между этими двумя временными значениями.
- Пример использования:

t1 := time.Now()
t2 := t1.Add(2 * time.Hour)
duration := t2.Sub(t1) // возвращает 2 часа


2. Time.Add():
- Используется для добавления определенного временного интервала (типа Duration`) к объекту типа `Time.
- Принимает значение Duration и возвращает новый объект Time, который представляет момент времени, полученный после добавления указанного интервала.
- Пример использования:

t := time.Now()
newTime := t.Add(2 * time.Hour) // возвращает t плюс 2 часа


Таким образом, Time.Sub() используется для нахождения разницы между временными метками, а Time.Add() — для добавления интервала времени к конкретной временной метке.

👉 @golang_lib
👍6
📢Что делать, когда процессы «пытаются» одновременно получить доступ к данным без правильной синхронизации?

Это называется «состоянием гонки». О том, как выйти из такого состояния, мы поговорим на открытом онлайн-уроке «Race condition, и как с ним бороться»

📅 Дата и время: 1 ноября, 20:00 МСК
🔗Записаться на урок: https://vk.cc/cDCn10

Вы узнаете:
- О типовых сценариях возникновения состояния гонки
- Как и для чего использовать пакет Symfony Lock
- Как восстанавливать работу с БД после исключений

Будет интересно php-разработчикам

💡Встречаемся в преддверии старта курса «Symfony Framework». Все участники вебинара получат специальную цену на обучение!

➡️Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок: https://vk.cc/cDCn10

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👎3
Остаться в живых (keepalive) feat. HTTP/2, Go & gRPC-Go

В этой статье мы разберём известную идею — keepalive в межсервисном взаимодействии, которая спасла уже не одну компанию в трудное время :). Но чтобы добавить интереса, мы разберём, какие проблемы в keepalive принесли современные технологии (ведь что может пойти не так с этой простой идеей?). Поэтому в статье мы рассмотрим механизмы, которые позволяют проверять стабильность соединения между клиентом и сервером в случае, когда обычные TCP keepalive из-за сложности архитектуры не могут определить состояние сервера.

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

👉 @golang_lib
👍2
PNGify

PNGify — это инструмент командной строки, написанный на Go, который позволяет кодировать текст и файлы в PNG-изображения и декодировать их обратно в исходную форму. Этот подход сочетает обработку текста и изображений, предлагая забавный способ хранения и извлечения данных. Цель этого экспериментального проекта — исследовать креативные возможности.

https://github.com/tofl/PNGify

👉 @golang_lib
3👍1