Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
378 - Telegram Web
Telegram Web
Как использовать defer в Go

Defer — это ключевое слово в Go, которое позволяет отложить выполнение функции до момента завершения выполнения текущей функции. Это относительно простой способ управлять ресурсами.

В этой статье мы и рассмотрим как использовать defer в Golang.

https://habr.com/ru/companies/otus/articles/833702/

#golang

👉 @golang_lib
12 личных приёмов работы с Go, которые повысили мою продуктивность

Возможно, вы не встречали эти техники раньше, так как я разработал их специально для использования в моей команде.

https://blog.devtrovert.com/p/12-personal-go-tricks-that-transformed

#golang

👉 @golang_lib
Реализация in-memory кэша на Go

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

https://www.mohitkhare.com/blog/go-in-memory-cache/

#golang

👉 @golang_lib
«Бобер выдыхай»: Go, WinAPI и ассемблер

Что вам приходит в голову при слове «Golang»? Google и микросервисы? Я тоже так думал, но реальность оказалась значительно интересней.

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

#golang

👉 @golang_lib
Как мы ускорили Golang-тесты на CI

В этой статье я расскажу о том, как желание улучшить свой рабочий процесс CI помогло ускорить все golang-пайплайны в PaaS СберМаркета.

В СберМаркете микросервисная архитектура. В качестве CI/CD используется GitLab. На CI гоняются вполне типовые задачи по тестированию, различным проверкам, сборкам образов и т. д. Часть job предоставляется самим сервисом, часть — внедряется в пайплайн сервиса нашей платформой.

Во всех golang-сервисах пишут тесты на свой код. В разных сервисах подход к тестированию немного различается, но сейчас я не буду углубляться в виды тестирования. Общее между всеми сервисами — «в среднем по больнице» тесты гоняются на CI более 5 минут.

Я пришел в СберМаркет в конце августа 2023 года. Глядя на набор Unit-тестов в одном из наших сервисов Odin, я немного расстроился. Каждый раз нужно было ждать на CI больше 6 минут, чтобы узнать, все ли хорошо с тестами. Их в наборе было около 400.

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

https://habr.com/ru/companies/kuper/articles/806725/

#golang

👉 @golang_lib
Huma — REST/HTTP API фреймворк для Golang с поддержкой OpenAPI 3.1

Современный, простой, быстрый и гибкий микрофреймворк для создания HTTP REST/RPC API на Go, поддерживаемый OpenAPI 3 и JSON Schema.


https://github.com/danielgtaylor/huma

#golang

👉 @golang_lib
Использование миграций баз данных в Go

Недавно мы столкнулись с необходимостью найти библиотеку для удобной работы с базами данных. В нашем проекте команда решила не использовать ORM (Object-Relational Mapping), а вместо этого применить миграции. Так как я работал только с ORM, мне, как и автору статьи, было мало знакомо понятие миграций баз данных. В поисках информации о миграциях и популярных решениях, я наткнулся на эту статью. Перевод статьи я оставил ниже. Возможно, она будет вам полезна. Буду признателен, если вы сможете поделиться библиотеками, которые используете.

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

original https://blog.stackademic.com/using-database-migrations-with-golang-7f6736f580c8

#golang

👉 @golang_lib
Функциональные опции в Go

Салют! Меня зовут Дима, я руковожу командой разработки ядра цифровой медицины в Республике Узбекистан. Сегодня я хочу поделиться своими знаниями о паттерне, который может значительно упростить работу, если ты пишешь на Go. Речь пойдет о функциональных опциях.

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

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

Представь что у тебя есть функция, у которой много параметров для конфигурации. Как обычно пишутся такие функции? Ты создаешь структуру, пихаешь в неё все имеющиеся параметры, затем пишешь для неё конструктор, в который также суешь все эти параметры в виде аргументов. Теперь при вызове функции приходится каждый раз прописывать одни и те же аргументы для конфигурации. Это может быстро превратиться в кошмар, особенно если этих параметров становится 10, 15 или даже 20. Запутаться или ошибиться в таком случае очень легко, так как функция превращается в свалку аргументов.

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

#golang

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

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

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

👉 @golang_lib
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
В чем разница между var x int = 2 и x := 2 в Go?

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

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

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

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

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

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


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


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

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

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

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

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

👉 @golang_lib
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
С нуля до продакшена: Путешествие Go в Google

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

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

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

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

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

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

👉 @golang_lib
2025/06/16 17:03:43
Back to Top
HTML Embed Code: