🥳 Вышел Go 1.23.0!
📝 Release notes: https://go.dev/doc/go1.23
⬇️ Download: https://go.dev/dl/#go1.23.0
#golang
👉 @golang_lib
📝 Release notes: https://go.dev/doc/go1.23
⬇️ Download: https://go.dev/dl/#go1.23.0
#golang
👉 @golang_lib
Как использовать defer в Go
Defer — это ключевое слово в Go, которое позволяет отложить выполнение функции до момента завершения выполнения текущей функции. Это относительно простой способ управлять ресурсами.
В этой статье мы и рассмотрим как использовать defer в Golang.
https://habr.com/ru/companies/otus/articles/833702/
#golang
👉 @golang_lib
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
Возможно, вы не встречали эти техники раньше, так как я разработал их специально для использования в моей команде.
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
В постоянно развивающемся мире разработки программного обеспечения производительность является ключевым фактором. Независимо от того, создаёте ли вы веб-приложение, микросервис или любую другую программную систему, оптимизация задержки ваших 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»? 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
В этой статье я расскажу о том, как желание улучшить свой рабочий процесс 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
Современный, простой, быстрый и гибкий микрофреймворк для создания 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
Недавно мы столкнулись с необходимостью найти библиотеку для удобной работы с базами данных. В нашем проекте команда решила не использовать 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
Салют! Меня зовут Дима, я руковожу командой разработки ядра цифровой медицины в Республике Узбекистан. Сегодня я хочу поделиться своими знаниями о паттерне, который может значительно упростить работу, если ты пишешь на Go. Речь пойдет о функциональных опциях.
Поначалу это может показаться немного сложным, но на самом деле идея и реализация очень просты. Поверь, как только ты разберешься, твой код станет немного гибче и проще.
К сожалению в Go нет богатого функционала управления “обязательными” и “необязательными” аргументами функции, также нет приятного способа присваивания дефолтных значений этим аргументам, однако есть небольшой лайфхак, об этом сегодня и пойдет речь.
Представь что у тебя есть функция, у которой много параметров для конфигурации. Как обычно пишутся такие функции? Ты создаешь структуру, пихаешь в неё все имеющиеся параметры, затем пишешь для неё конструктор, в который также суешь все эти параметры в виде аргументов. Теперь при вызове функции приходится каждый раз прописывать одни и те же аргументы для конфигурации. Это может быстро превратиться в кошмар, особенно если этих параметров становится 10, 15 или даже 20. Запутаться или ошибиться в таком случае очень легко, так как функция превращается в свалку аргументов.
https://habr.com/ru/articles/842594/
#golang
👉 @golang_lib
Как построить полноценное распределенное файловое хранилище на Golang
https://www.youtube.com/watch?v=bymQakvTY40
#golang
👉 @golang_lib
https://www.youtube.com/watch?v=bymQakvTY40
#golang
👉 @golang_lib
YouTube
How To Build A Complete Distributed File Storage In Golang
► Join my Discord community for free education 👉 https://discord.com/invite/Ac7CWREe58
► Exclusive Videos, Mini courses, Resume reviews, and coaching 👉 http://thetotalcoder.com
► 33% OFF on my Go + HTMX + Templ Course 👉https://bit.ly/3UFruxO
► Enjoy a…
► Exclusive Videos, Mini courses, Resume reviews, and coaching 👉 http://thetotalcoder.com
► 33% OFF on my Go + HTMX + Templ Course 👉https://bit.ly/3UFruxO
► Enjoy a…
Когда Kubernetes и Go не очень хорошо работают вместе
Go не знает об ограничениях, установленных для его контейнера, что приводит к некоторым проблемам, которые нелегко отследить. Это история о том, как я наткнулся на одну из них.
https://lalatron.hashnode.dev/when-kubernetes-and-go-dont-work-well-together
👉 @golang_lib
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
Автор: 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
Результат тот же — переменная со значением 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
Казалось бы, в посгресе и так есть неплохой полнотекстовый поиск (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
Я пишу на Go несколько лет, в Каруне многие вещи сделаны на нём; язык мне нравится своей простотой, незамысловатой прямолинейностью и приличной эффективностью. На других языках я писать не хочу.
Но сорян, к бесконечным if err != nil я до конца привыкнуть так и не смог.
Да-да, я знаю все аргументы: явное лучше неявного, язык Go многословен, зато понятен, и всё такое. Но, блин, на мой взгляд Го-вэй Го-вэю рознь.
https://habr.com/ru/companies/karuna/articles/830346/
👉 @golang_lib
Функция
https://pkg.go.dev/errors#Join
👉 @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
В статье поделюсь своим опытом применения фаззинга для нагрузочных и интеграционных тестирований. Расскажу про генерацию текстов на армянском языке, тестирование 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
Привет, я Кирилл Кузин — старший разработчик в компании Ви.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
Недавно Джереми Мейсон и Самир Аджмани написали о том, как 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
Прошло уже более года с тех пор как я написал статью - Анонимная сеть в 200 строк кода на Go. Пересмотрев её однажды осенним вечером я понял насколько всё в ней было ужасно - начиная с самого поведения логики кода и заканчивая его избыточностью. Сев за ноутбук и потратив от силы 20 минут у меня получилось написать сеть всего в 100 строк кода, используя лишь и только стандартную библиотеку языка.
https://habr.com/ru/articles/849552/
👉 @golang_lib