Освоение регулярных выражений в 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
Использование миграций баз данных в 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
👍5
Функциональные опции в 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
👍5❤1
Как построить полноценное распределенное файловое хранилище на 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…
👍8