Изучение Go в 2024 году; от новичка до сеньора
Мы все учимся по-разному и в разном темпе. Найти контент, который подходит именно нам, очень сложно. Ниже я попытался собрать в одном месте все замечательные материалы, которые мне попадались на протяжении многих лет, чтобы, надеюсь, помочь людям продвинуться в изучении Golang на следующий шаг.
https://www.bytesizego.com/blog/learning-golang-2024
👉 @golang_lib
Мы все учимся по-разному и в разном темпе. Найти контент, который подходит именно нам, очень сложно. Ниже я попытался собрать в одном месте все замечательные материалы, которые мне попадались на протяжении многих лет, чтобы, надеюсь, помочь людям продвинуться в изучении 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
Простейший загрузчик конфигураций для 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-приложениях.
https://www.honeybadger.io/blog/a-definitive-guide-to-regular-expressions-in-go/
👉 @golang_lib
От базовых паттернов до продвинутых техник - эта статья вооружит вас знаниями об эффективном использовании 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
Honeybadger Developer Blog
Mastering regular expressions in Go
From basic patterns to advanced techniques, this article will equip you with the knowledge to use regex effectively and efficiently in your Go applications.
👍2
Script
Это библиотека на языке Go для выполнения тех задач, которые хорошо умеют делать shell-скрипты: чтение файлов, выполнение подпроцессов, подсчет строк, сопоставление строк и так далее.
Почему бы не сделать так, чтобы писать программы системного администрирования на Go было так же легко, как и в обычном shell? script призван сделать это именно таким образом.
Сценарии оболочки часто представляют собой последовательность операций над потоком данных (конвейер). Именно так работает и скрипт.
https://github.com/bitfield/script
👉 @golang_lib
Это библиотека на языке 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
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
Go заимствует концепции императивных языков со статической типизацией. Он быстро компилируется и быстро выполняется, добавляет понятный параллелизм, поскольку многоядерные процессоры стали обычным явлением, и успешно используется в больших кодовых базах.
Go поставляется с богатой стандартной библиотекой и большим, развивающимся сообществом.
Руководство основано на книге Learn Go in Y Minutes, с небольшими изменениями, связанными с разделением кода на фрагменты, которые могут выполняться независимо. Большое спасибо авторам!
https://codapi.org/try/go/
👉 @golang_lib
👍2
Для чего в приведенном коде предназначена конструкция "_ struct{}"?
Конструкция
Это значит, что мы не сможем случайно инициализировать ProgInfo без указания имён полей, что может помочь избежать ошибок и повысить читаемость кода, особенно когда структура со временем расширяется новыми полями.
В Go, когда мы инициализируем структуру без указания имён полей, например:
Это называется неименованным или позиционным литералом. Такой способ инициализации может привести к ошибкам, особенно если порядок полей в структуре изменится или будут добавлены новые поля.
Добавление поля
👉 @golang_lib
Конструкция
_ struct{}
используется для предотвращения создания литералов структур без именованных полей при инициализации ProgInfo. Это значит, что мы не сможем случайно инициализировать ProgInfo без указания имён полей, что может помочь избежать ошибок и повысить читаемость кода, особенно когда структура со временем расширяется новыми полями.
В Go, когда мы инициализируем структуру без указания имён полей, например:
info := ProgInfo{0, 1, 2, 3}
Это называется неименованным или позиционным литералом. Такой способ инициализации может привести к ошибкам, особенно если порядок полей в структуре изменится или будут добавлены новые поля.
Добавление поля
_ struct{}
делает такую инициализацию невозможной, требуя от разработчика использовать именованные литералы, где каждое значение присваивается конкретному имени поля:info := ProgInfo{
Flags: 0,
Reguse: 1,
Regset: 2,
Regindex: 3,
}
👉 @golang_lib
👍21❤3
5 способов писать эффективный код на Go: от названий переменных до архитектуры
Если вы задумывались, какие практики использовать, чтобы писать код на Go быстро и качественно, этот материал для вас. Руководитель группы разработки подсистем Геннадий Ковалёв и эксперт по разработке ПО Даниил Подольский в YADRO обсуждают пять способов повысить эффективность разработки в команде Go-программистов: они расскажут, как называть переменные, составлять документацию и продумывать архитектуру так, чтобы специалистам в команде и смежных отделах было легко работать с написанным кодом.
Статья будет полезна начинающим специалистам и командам, которые недавно работают вместе. Опытных разработчиков приглашаем в комментарии — расскажите, какие практики для повышения эффективности кода используете вы.
https://habr.com/ru/companies/yadro/articles/803323/
👉 @golang_lib
Если вы задумывались, какие практики использовать, чтобы писать код на 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
Упражнение по созданию блога
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
Часть №1 | Планировщик Go
Часть №2 | Масштабирование планировщика
источник
👉 @golang_lib
👍6👎1
Как защитить свое Go-приложение
Очень важно думать о том, чтобы приложения были надежными и защищёнными. Go — язык, который известен своей простотой и производительностью. Но ни один язык не безопасен сам по себе и об этом нужно заботится самостоятельно.
В этой статье мы поделимся с вами методами, которые помогут сделать ваши Go-приложения неприступными крепостями.
https://habr.com/ru/companies/otus/articles/834336/
👉 @golang_lib
Очень важно думать о том, чтобы приложения были надежными и защищёнными. 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
📝 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
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
Возможно, вы не встречали эти техники раньше, так как я разработал их специально для использования в моей команде.
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
👍4
«Бобер выдыхай»: 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
👍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
Современный, простой, быстрый и гибкий микрофреймворк для создания HTTP REST/RPC API на Go, поддерживаемый OpenAPI 3 и JSON Schema.
https://github.com/danielgtaylor/huma
#golang
👉 @golang_lib
👍5