Библиотека Go (Golang) разработчика
2.58K subscribers
263 photos
95 videos
29 files
334 links
Полезные материалы по всему, что может быть полезно Golang разработчику. По всем вопросам @evgenycarter
Download Telegram
Изучение Go в 2024 году; от новичка до сеньора

Мы все учимся по-разному и в разном темпе. Найти контент, который подходит именно нам, очень сложно. Ниже я попытался собрать в одном месте все замечательные материалы, которые мне попадались на протяжении многих лет, чтобы, надеюсь, помочь людям продвинуться в изучении Golang на следующий шаг.

https://www.bytesizego.com/blog/learning-golang-2024

👉 @golang_lib
👍9
Konf

Простейший загрузчик конфигураций для Go, который читает/смотрит из файла, env, флага и облаков (AWS, Azure, GCP).

📌 Основные возможности:

🔧 konf.Unmarshal для чтения конфигурации в любой тип объекта.
🔧 konf.OnChange для регистрации колбэков при изменении конфигурации.
🔧 konf.Explain для понимания, откуда загружается конфигурация.
🔧 Различные провайдеры для загрузки конфигурации из облаков (AWS, Azure и GCP).
🔧 Zero dependencies в core модуле, который поддерживает загрузку конфигурации из переменных окружения, флагов и встроенной файловой системы.

https://github.com/nil-go/konf

👉 @golang_lib
👍4
Освоение регулярных выражений в Go

От базовых паттернов до продвинутых техник - эта статья вооружит вас знаниями об эффективном использовании regex в ваших Go-приложениях.

package main

import "strings"

func extractURLs(input string) []string {
var urls []string
words := strings.Fields(input)

for _, word := range words {
if strings.HasPrefix(word, "http://") || strings.HasPrefix(word, "https://") || strings.HasPrefix(word, "www.") {
urls = append(urls, word)
}
}

return urls
}


https://www.honeybadger.io/blog/a-definitive-guide-to-regular-expressions-in-go/

👉 @golang_lib
👍2
Script

Это библиотека на языке Go для выполнения тех задач, которые хорошо умеют делать shell-скрипты: чтение файлов, выполнение подпроцессов, подсчет строк, сопоставление строк и так далее.

Почему бы не сделать так, чтобы писать программы системного администрирования на Go было так же легко, как и в обычном shell? script призван сделать это именно таким образом.

Сценарии оболочки часто представляют собой последовательность операций над потоком данных (конвейер). Именно так работает и скрипт.

https://github.com/bitfield/script

👉 @golang_lib
👍14
Использование брокера сообщений Apache Kafka в распределенных очередях

24 июля в 20:00 мск

Хотите узнать, как эффективно управлять сообщениями в масштабируемых распределенных системах? Тогда этот открытый вебинар для вас!

Мы разберем основы и архитектуру Apache Kafka, принципы работы с распределенными очередями, а также научимся настраивать и развертывать кластер Kafka в Docker. Вы увидите реальные примеры использования Kafka для обмена сообщениями между сервисами и узнаете о лучших практиках и рекомендациях по интеграции Kafka в ваши проекты.

💻 Урок будет полезен Fullstack и Backend-разработчикам, DevOps-инженерам, архитекторам ПО и администраторам систем, а также всем, кто хочет углубить свои знания об Apache Kafka и его применении.

🔴 Регистрация открыта: https://vk.cc/cyu34x

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👎2👍1
Try / Go in Y minutes

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

Go поставляется с богатой стандартной библиотекой и большим, развивающимся сообществом.

Руководство основано на книге Learn Go in Y Minutes, с небольшими изменениями, связанными с разделением кода на фрагменты, которые могут выполняться независимо. Большое спасибо авторам!

https://codapi.org/try/go/

👉 @golang_lib
👍2
Для чего в приведенном коде предназначена конструкция "_ struct{}"?

Конструкция _ struct{} используется для предотвращения создания литералов структур без именованных полей при инициализации ProgInfo.

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

В Go, когда мы инициализируем структуру без указания имён полей, например:

info := ProgInfo{0, 1, 2, 3}


Это называется неименованным или позиционным литералом. Такой способ инициализации может привести к ошибкам, особенно если порядок полей в структуре изменится или будут добавлены новые поля.

Добавление поля _ struct{} делает такую инициализацию невозможной, требуя от разработчика использовать именованные литералы, где каждое значение присваивается конкретному имени поля:

info := ProgInfo{
Flags: 0,
Reguse: 1,
Regset: 2,
Regindex: 3,
}


👉 @golang_lib
👍213
5 способов писать эффективный код на Go: от названий переменных до архитектуры

Если вы задумывались, какие практики использовать, чтобы писать код на Go быстро и качественно, этот материал для вас. Руководитель группы разработки подсистем Геннадий Ковалёв и эксперт по разработке ПО Даниил Подольский в YADRO обсуждают пять способов повысить эффективность разработки в команде Go-программистов: они расскажут, как называть переменные, составлять документацию и продумывать архитектуру так, чтобы специалистам в команде и смежных отделах было легко работать с написанным кодом.

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

https://habr.com/ru/companies/yadro/articles/803323/

👉 @golang_lib
👍5
Создаем блог на Go

Упражнение по созданию блога
https://www.calhoun.io/building-a-blog-exercise/

Создание блога на Go: Рендеринг Raw Markdown
https://www.calhoun.io/building-a-blog-part-1/

Создание блога на Go: Рендеринг Markdown в HTML
https://www.calhoun.io/building-a-blog-part-2/


👉 @golang_lib
👍3
Пишем рантайм Golang на чистом C

Часть №1 | Планировщик Go
Часть №2 | Масштабирование планировщика

источник

👉 @golang_lib
👍6👎1
Как защитить свое Go-приложение

Очень важно думать о том, чтобы приложения были надежными и защищёнными. Go — язык, который известен своей простотой и производительностью. Но ни один язык не безопасен сам по себе и об этом нужно заботится самостоятельно.

В этой статье мы поделимся с вами методами, которые помогут сделать ваши Go-приложения неприступными крепостями.

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

👉 @golang_lib
👍3👎1
🥳 Вышел Go 1.23.0!

📝 Release notes: https://go.dev/doc/go1.23

⬇️ Download: https://go.dev/dl/#go1.23.0

#golang

👉 @golang_lib
👍7🤯2👎1
Как использовать defer в Go

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

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

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

#golang

👉 @golang_lib
👍5
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
👍4
«Бобер выдыхай»: 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
👍4
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
👍5