Две причины, по которым я предпочитаю передавать указатели на структуры в Go
Когда речь заходит о значениях структур в Go, одной из общих точек напряжения является вопрос, следует ли передавать их через указатели или просто копировать значение. Поскольку указатели имеют некоторую накладную стоимость, естественная реакция состоит в том, чтобы избегать их использования любой ценой и прибегать к передаче копий значений структур, где это возможно.
Я здесь, чтобы немного оспорить эту точку зрения. Слишком многие дискуссии о том, использовать ли определённую конструкцию Go, становятся слишком техническими слишком быстро. Это может быть оправдано при разработке низкоуровневых системных компонентов с нулевым трением или массово масштабируемых веб-сервисов.
https://preslav.me/2024/04/23/two-reasons-to-prefer-struct-pointers-in-golang/
👉 @golang_lib
Когда речь заходит о значениях структур в Go, одной из общих точек напряжения является вопрос, следует ли передавать их через указатели или просто копировать значение. Поскольку указатели имеют некоторую накладную стоимость, естественная реакция состоит в том, чтобы избегать их использования любой ценой и прибегать к передаче копий значений структур, где это возможно.
Я здесь, чтобы немного оспорить эту точку зрения. Слишком многие дискуссии о том, использовать ли определённую конструкцию Go, становятся слишком техническими слишком быстро. Это может быть оправдано при разработке низкоуровневых системных компонентов с нулевым трением или массово масштабируемых веб-сервисов.
https://preslav.me/2024/04/23/two-reasons-to-prefer-struct-pointers-in-golang/
👉 @golang_lib
Анонс исcледования рынка Go-разработчиков, 2024
Второй год подряд ребята из DevCrowd проводят большое исследование Go-разработчиков:
⚫️ Что входит в обязанности и каких навыков не хватает
⚫️ Сколько в среднем зарабатывают в профессии в зависимости от грейда
⚫️ Какие инструменты, сервисы наиболее популярны
⚫️ Что читают, слушают и смотрят для профессионального развития.
Проходите опрос, делитесь своими мнениями и помогите сделать исследование максимально охватным. Организаторы обещают сравнить данные с прошлым годом и поделиться выводами публично уже в конце ноября.
Результаты опроса помогут вам сравнить свои ожидания с рыночными, построить план своего развития, и просто понять, что происходит с индустрией!
👉 Пройти опрос
Посмотреть результаты прошлого года
Второй год подряд ребята из DevCrowd проводят большое исследование Go-разработчиков:
Проходите опрос, делитесь своими мнениями и помогите сделать исследование максимально охватным. Организаторы обещают сравнить данные с прошлым годом и поделиться выводами публично уже в конце ноября.
Результаты опроса помогут вам сравнить свои ожидания с рыночными, построить план своего развития, и просто понять, что происходит с индустрией!
👉 Пройти опрос
Посмотреть результаты прошлого года
Please open Telegram to view this post
VIEW IN TELEGRAM
Обработка ошибок в web apps не должна быть такой сложной
Зачем?
В процессе работы с Go я столкнулся с ещё одной проблемой — обработкой ошибок в хендлерах. Как можно сделать этот процесс удобным и эффективным для 150+ обработчиков? Как обеспечить консистентность и поддержку при обработке ошибок?
Разумеется, мои поиски палочки-выручалочки закончились ничем. Есть протокол RFS7807, есть библиотека, есть масса противоречивых статей - выбирай, но как будто чего-то не хватает... По существу статья ниже полностью не отвечает на мои вопросы, но в ней достаточно много примеров, и я думаю, она будет полезной. Это лишь повод/предложение поделиться вашими примерами успешных кейсов.
https://habr.com/ru/articles/811361/
👉 @golang_lib
Зачем?
В процессе работы с Go я столкнулся с ещё одной проблемой — обработкой ошибок в хендлерах. Как можно сделать этот процесс удобным и эффективным для 150+ обработчиков? Как обеспечить консистентность и поддержку при обработке ошибок?
Разумеется, мои поиски палочки-выручалочки закончились ничем. Есть протокол RFS7807, есть библиотека, есть масса противоречивых статей - выбирай, но как будто чего-то не хватает... По существу статья ниже полностью не отвечает на мои вопросы, но в ней достаточно много примеров, и я думаю, она будет полезной. Это лишь повод/предложение поделиться вашими примерами успешных кейсов.
https://habr.com/ru/articles/811361/
👉 @golang_lib
Эволюция стандартной библиотеки Go с пакетом math/rand/v2
С момента выхода Go 1 в марте 2012 года изменения в стандартной библиотеке были ограничены обещанием совместимости Go. В целом, совместимость оказалась благом для пользователей Go, предоставив стабильную базу для производственных систем, документации, учебных пособий, книг и многого другого. Однако со временем мы осознали ошибки в оригинальных API, которые нельзя исправить без нарушения совместимости; в других случаях изменились лучшие практики и соглашения. Нам нужен план для внесения важных, но несовместимых изменений.
Этот пост в блоге посвящён новому пакету math/rand/v2 в Go 1.22 — первому пакету «v2» в стандартной библиотеке. Он вносит необходимые улучшения в API math/rand, но что ещё важнее, он служит примером того, как мы можем пересматривать другие пакеты стандартной библиотеки по мере возникновения необходимости.
(В Go math/rand и math/rand/v2 — это два разных пакета с разными путями для импорта. Go 1 и все последующие версии включают math/rand; Go 1.22 добавил math/rand/v2. Программа на Go может импортировать либо один из пакетов, либо оба.)
В этом посте обсуждаются конкретные причины изменений в math/rand/v2, а также общие принципы, которые будут руководить созданием новых версий других пакетов.
https://go.dev/blog/randv2
👉 @golang_lib
С момента выхода Go 1 в марте 2012 года изменения в стандартной библиотеке были ограничены обещанием совместимости Go. В целом, совместимость оказалась благом для пользователей Go, предоставив стабильную базу для производственных систем, документации, учебных пособий, книг и многого другого. Однако со временем мы осознали ошибки в оригинальных API, которые нельзя исправить без нарушения совместимости; в других случаях изменились лучшие практики и соглашения. Нам нужен план для внесения важных, но несовместимых изменений.
Этот пост в блоге посвящён новому пакету math/rand/v2 в Go 1.22 — первому пакету «v2» в стандартной библиотеке. Он вносит необходимые улучшения в API math/rand, но что ещё важнее, он служит примером того, как мы можем пересматривать другие пакеты стандартной библиотеки по мере возникновения необходимости.
(В Go math/rand и math/rand/v2 — это два разных пакета с разными путями для импорта. Go 1 и все последующие версии включают math/rand; Go 1.22 добавил math/rand/v2. Программа на Go может импортировать либо один из пакетов, либо оба.)
В этом посте обсуждаются конкретные причины изменений в math/rand/v2, а также общие принципы, которые будут руководить созданием новых версий других пакетов.
https://go.dev/blog/randv2
👉 @golang_lib
Awesome Ebitengine
Список удивительных фреймворков, библиотек и программного обеспечения для Ebitengine
https://github.com/sedyh/awesome-ebitengine
👉 @golang_lib
Список удивительных фреймворков, библиотек и программного обеспечения для Ebitengine
https://github.com/sedyh/awesome-ebitengine
👉 @golang_lib
GitHub
GitHub - sedyh/awesome-ebitengine: A curated list of awesome Ebitengine frameworks, libraries and software
A curated list of awesome Ebitengine frameworks, libraries and software - GitHub - sedyh/awesome-ebitengine: A curated list of awesome Ebitengine frameworks, libraries and software
В чем разница между методами Time.Sub() и Time.Add() пакета time?
В пакете
1. Time.Sub():
- Используется для вычисления разницы между двумя временными значениями.
- Принимает другой объект типа
- Пример использования:
2. Time.Add():
- Используется для добавления определенного временного интервала (типа
- Принимает значение
- Пример использования:
Таким образом,
👉 @golang_lib
В пакете
time
языка Go методы Time.Sub()
и Time.Add()
служат для работы с временными значениями, но выполняют разные задачи:1. Time.Sub():
- Используется для вычисления разницы между двумя временными значениями.
- Принимает другой объект типа
Time
и возвращает Duration
, представляющую время, прошедшее между этими двумя временными значениями.- Пример использования:
t1 := time.Now()
t2 := t1.Add(2 * time.Hour)
duration := t2.Sub(t1) // возвращает 2 часа
2. Time.Add():
- Используется для добавления определенного временного интервала (типа
Duration`) к объекту типа `Time
.- Принимает значение
Duration
и возвращает новый объект Time
, который представляет момент времени, полученный после добавления указанного интервала.- Пример использования:
t := time.Now()
newTime := t.Add(2 * time.Hour) // возвращает t плюс 2 часа
Таким образом,
Time.Sub()
используется для нахождения разницы между временными метками, а Time.Add()
— для добавления интервала времени к конкретной временной метке.👉 @golang_lib
Сервер push-уведомлений, написанный на языке Go (Golang).
https://github.com/appleboy/gorush
👉 @golang_lib
https://github.com/appleboy/gorush
👉 @golang_lib
GitHub
GitHub - appleboy/gorush: A push notification server written in Go (Golang).
A push notification server written in Go (Golang). - appleboy/gorush
📢Что делать, когда процессы «пытаются» одновременно получить доступ к данным без правильной синхронизации?
Это называется «состоянием гонки». О том, как выйти из такого состояния, мы поговорим на открытом онлайн-уроке «Race condition, и как с ним бороться»
📅 Дата и время: 1 ноября, 20:00 МСК
🔗Записаться на урок: https://vk.cc/cDCn10
Вы узнаете:
- О типовых сценариях возникновения состояния гонки
- Как и для чего использовать пакет Symfony Lock
- Как восстанавливать работу с БД после исключений
Будет интересно php-разработчикам
💡Встречаемся в преддверии старта курса «Symfony Framework». Все участники вебинара получат специальную цену на обучение!
➡️Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок: https://vk.cc/cDCn10
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Это называется «состоянием гонки». О том, как выйти из такого состояния, мы поговорим на открытом онлайн-уроке «Race condition, и как с ним бороться»
📅 Дата и время: 1 ноября, 20:00 МСК
🔗Записаться на урок: https://vk.cc/cDCn10
Вы узнаете:
- О типовых сценариях возникновения состояния гонки
- Как и для чего использовать пакет Symfony Lock
- Как восстанавливать работу с БД после исключений
Будет интересно php-разработчикам
💡Встречаемся в преддверии старта курса «Symfony Framework». Все участники вебинара получат специальную цену на обучение!
➡️Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок: https://vk.cc/cDCn10
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Остаться в живых (keepalive) feat. HTTP/2, Go & gRPC-Go
В этой статье мы разберём известную идею — keepalive в межсервисном взаимодействии, которая спасла уже не одну компанию в трудное время :). Но чтобы добавить интереса, мы разберём, какие проблемы в keepalive принесли современные технологии (ведь что может пойти не так с этой простой идеей?). Поэтому в статье мы рассмотрим механизмы, которые позволяют проверять стабильность соединения между клиентом и сервером в случае, когда обычные TCP keepalive из-за сложности архитектуры не могут определить состояние сервера.
https://habr.com/ru/companies/ozontech/articles/810427/
👉 @golang_lib
В этой статье мы разберём известную идею — keepalive в межсервисном взаимодействии, которая спасла уже не одну компанию в трудное время :). Но чтобы добавить интереса, мы разберём, какие проблемы в keepalive принесли современные технологии (ведь что может пойти не так с этой простой идеей?). Поэтому в статье мы рассмотрим механизмы, которые позволяют проверять стабильность соединения между клиентом и сервером в случае, когда обычные TCP keepalive из-за сложности архитектуры не могут определить состояние сервера.
https://habr.com/ru/companies/ozontech/articles/810427/
👉 @golang_lib
PNGify
PNGify — это инструмент командной строки, написанный на Go, который позволяет кодировать текст и файлы в PNG-изображения и декодировать их обратно в исходную форму. Этот подход сочетает обработку текста и изображений, предлагая забавный способ хранения и извлечения данных. Цель этого экспериментального проекта — исследовать креативные возможности.
https://github.com/tofl/PNGify
👉 @golang_lib
PNGify — это инструмент командной строки, написанный на Go, который позволяет кодировать текст и файлы в PNG-изображения и декодировать их обратно в исходную форму. Этот подход сочетает обработку текста и изображений, предлагая забавный способ хранения и извлечения данных. Цель этого экспериментального проекта — исследовать креативные возможности.
https://github.com/tofl/PNGify
👉 @golang_lib
Разработка фуллстек веб-приложения на Go + React: туториал от Jetbrains
Part 1
https://www.jetbrains.com/guide/go/tutorials/webapp_go_react_part_one/
Part 2
https://www.jetbrains.com/guide/go/tutorials/webapp_go_react_part_two/
Part 3
https://www.jetbrains.com/guide/go/tutorials/webapp_go_react_part_three/
👉 @golang_lib
Part 1
https://www.jetbrains.com/guide/go/tutorials/webapp_go_react_part_one/
Part 2
https://www.jetbrains.com/guide/go/tutorials/webapp_go_react_part_two/
Part 3
https://www.jetbrains.com/guide/go/tutorials/webapp_go_react_part_three/
👉 @golang_lib
Прикладное введение в eBPF с Go
Большую часть времени, когда мы разрабатываем программное обеспечение или даже используем его, мы играем в безопасных границах операционной системы. Мы даже не знаем, как этот IP-пакет был принят сетевым интерфейсом, или как эти inodes были обработаны файловой системой, когда мы сохраняли файл.
Практический гайд с акцентом на практику использования eBPF командой Edge Delta.
https://edgedelta.com/company/blog/applied-introduction-ebpf-go
👉 @golang_lib
Большую часть времени, когда мы разрабатываем программное обеспечение или даже используем его, мы играем в безопасных границах операционной системы. Мы даже не знаем, как этот IP-пакет был принят сетевым интерфейсом, или как эти inodes были обработаны файловой системой, когда мы сохраняли файл.
Практический гайд с акцентом на практику использования eBPF командой Edge Delta.
https://edgedelta.com/company/blog/applied-introduction-ebpf-go
👉 @golang_lib
This media is not supported in your browser
VIEW IN TELEGRAM
Бесплатное IT-образование в 2024
Отобрали для вас полезные телеграм-каналы, которые помогут освоить программирование и другие IT-направления
Выбирайте нужное и подписывайтесь:
👩💻 С/С++: @Cpportal
📱 GitHub: @git_developer
🤓 Книги айти: @portalToIT
👩💻 Golang: @juniorGolang
👩💻 PHP: @PHPortal
👩💻 Моб. разработка: @MobDev
👩💻 Java: @Java_Iibrary
👩💻 Frontend: @FrontendPortal
⚙️ Backend: @BackendPortal
👩💻 Python: @PythonPortal
👩💻 C#: @KodBlog
🖥 Базы Данных & SQL: @SQL
👩💻 Разработка игр: @GameDevgx
👩💻 DevOps: @loose_code
🖥 Data Science: @DataSciencegx
🤔 Хакинг & ИБ: @cybersecinform
🐞 Тестирование: @QAPortal
📱 Маркетинг: @MarketingPortal
🖥 Дизайн: @PortalToDesign
➡️ Сохраняйте себе, чтобы не потерять
Отобрали для вас полезные телеграм-каналы, которые помогут освоить программирование и другие IT-направления
Выбирайте нужное и подписывайтесь:
🐞 Тестирование: @QAPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Ntcharts
Это инструмент на Go для построения диаграмм в терминале, таких как гистограммы, линии и временные ряды, с использованием библиотеки Bubble Tea.
https://github.com/NimbleMarkets/ntcharts
👉 @golang_lib
Это инструмент на Go для построения диаграмм в терминале, таких как гистограммы, линии и временные ряды, с использованием библиотеки Bubble Tea.
https://github.com/NimbleMarkets/ntcharts
👉 @golang_lib
database/sql: плохой, хороший, злой
Многие Golang-разработчики пробовали работать с БД в Go, и у каждого — свои боли. В этой статье поисследуем библиотеку database/sql для работы с абстрактной СУБД и нашу имплементацию database/sql драйвера под СУБД YDB. Рассмотрим трудности эксплуатации при использовании драйвера database/sql на проде. А также расскажем, что мы делали для решения проблем.
Меня зовут Алексей Мясников, я — руководитель Application Team в команде разработки YDB. Я очень люблю git blame за то, что с его помощью можно проследить, как развивалась инженерная мысль с течением времени и немножко побыть в шкуре разработчика той или иной классной штуки. В статье я расскажу, как реализовать драйвер database/sql для распределённой базы данных, такой как YDB, какие проблемы при этом придётся преодолеть и как менялся подход с выходом новых версий Go.
https://habr.com/ru/companies/oleg-bunin/articles/808097/
👉 @golang_lib
Многие Golang-разработчики пробовали работать с БД в Go, и у каждого — свои боли. В этой статье поисследуем библиотеку database/sql для работы с абстрактной СУБД и нашу имплементацию database/sql драйвера под СУБД YDB. Рассмотрим трудности эксплуатации при использовании драйвера database/sql на проде. А также расскажем, что мы делали для решения проблем.
Меня зовут Алексей Мясников, я — руководитель Application Team в команде разработки YDB. Я очень люблю git blame за то, что с его помощью можно проследить, как развивалась инженерная мысль с течением времени и немножко побыть в шкуре разработчика той или иной классной штуки. В статье я расскажу, как реализовать драйвер database/sql для распределённой базы данных, такой как YDB, какие проблемы при этом придётся преодолеть и как менялся подход с выходом новых версий Go.
https://habr.com/ru/companies/oleg-bunin/articles/808097/
👉 @golang_lib
Использование пакетов
В предстоящем побочном проекте мне понадобилось шифровать и дешифровать данные, хранящиеся в базе данных SQLite. Эта статья предлагает вводный обзор практик шифрования и дешифрования, но не предназначена для глубокого изучения темы. Шифрование — это сложная область, требующая внимательной реализации для обеспечения безопасности данных. Ища материалы по этой теме, я столкнулся с несоответствиями и проблемами в примерах, что побудило меня задокументировать свои выводы для дальнейшего использования.
https://aran.dev/posts/using-golang-crypto-aes-and-crypto-cipher-packages/
👉 @golang_lib
crypto/aes
и crypto/cipher
в GolangВ предстоящем побочном проекте мне понадобилось шифровать и дешифровать данные, хранящиеся в базе данных SQLite. Эта статья предлагает вводный обзор практик шифрования и дешифрования, но не предназначена для глубокого изучения темы. Шифрование — это сложная область, требующая внимательной реализации для обеспечения безопасности данных. Ища материалы по этой теме, я столкнулся с несоответствиями и проблемами в примерах, что побудило меня задокументировать свои выводы для дальнейшего использования.
https://aran.dev/posts/using-golang-crypto-aes-and-crypto-cipher-packages/
👉 @golang_lib
Обработка ошибок в Golang. errors.Is(), errors.As(), errors.Unwrap(), пользовательские ошибки и многое другое
Обработка ошибок в Golang может быть сложной для понимания. Я знаю, что у меня были трудности с этим, и статьи, на которые я натыкался, предлагали некоторую информацию, но она была немного запутанной, а некоторые использовали сложные примеры.
В этой статье я постараюсь упростить вам задачу.
https://adrianlarion.com/golang-error-handling-demystified-errors-is-errors-as-errors-unwrap-custom-errors-and-more/
👉 @golang_lib
Обработка ошибок в Golang может быть сложной для понимания. Я знаю, что у меня были трудности с этим, и статьи, на которые я натыкался, предлагали некоторую информацию, но она была немного запутанной, а некоторые использовали сложные примеры.
В этой статье я постараюсь упростить вам задачу.
https://adrianlarion.com/golang-error-handling-demystified-errors-is-errors-as-errors-unwrap-custom-errors-and-more/
👉 @golang_lib
Создаем DNS-резолвер с помощью Golang
В статье Доменико Лучиани описывает, как создать резолвер DNS с использованием Golang. Она охватывает основные аспекты DNS-резолвера, такие как обработка запросов, подключение к серверам DNS и интерпретация ответов. Это руководство предназначено для разработчиков, которые хотят понять и реализовать основные функции DNS в среде Golang.
https://domenicoluciani.com/2024/05/07/create-dns-resolver.html
👉 @golang_lib
В статье Доменико Лучиани описывает, как создать резолвер DNS с использованием Golang. Она охватывает основные аспекты DNS-резолвера, такие как обработка запросов, подключение к серверам DNS и интерпретация ответов. Это руководство предназначено для разработчиков, которые хотят понять и реализовать основные функции DNS в среде Golang.
https://domenicoluciani.com/2024/05/07/create-dns-resolver.html
👉 @golang_lib