Всем привет! Буду здесь публиковать заметки по языку Golang и IT в общем. Так же репостить интересные новости и статьи.
Песня для тех, кто любит металл и программирование 😎
https://youtu.be/yup8gIXxWDU?si=B1m63kVNfuuJtKj2
https://youtu.be/yup8gIXxWDU?si=B1m63kVNfuuJtKj2
YouTube
NANOWAR OF STEEL - HelloWorld.java (Source Code Video) | Napalm Records
Live album "XX Years Of Steel" out this Friday!
Order here: https://lnk.to/NoS-XX-YearsOfSteel
Mixed by Christian Ice at Temple of Noise Studios
Video by LyricVids.com
Official HelloWorld Repository: https://github.com/NanowarOfSteel/HelloWorld
NANOWAR…
Order here: https://lnk.to/NoS-XX-YearsOfSteel
Mixed by Christian Ice at Temple of Noise Studios
Video by LyricVids.com
Official HelloWorld Repository: https://github.com/NanowarOfSteel/HelloWorld
NANOWAR…
❤1
В продолжение темы клипа Nanowar Of Steel. Если интересны подробности, то вот новость на 3DNews. А еще ребята выложили код из песни на Github. Почитал, улыбнуло 😊
3DNews - Daily Digital Digest
Металл-группа Nanowar of Steel на серьёзных щах спела Java-код — текст состоит из реальной программы и её можно скачать
Итальянский пародийный музыкальный коллектив Nanowar of Steel, работающий в жанрах хэви- и пауэр-метал, выпустил композицию «HelloWorld.java». Песня исполнена на языке программирования Java, и это полностью рабочий код, который был опубликован на GitHub.
🔥1
Выпустил новую версию генератора DI Container'а - библиотеку DIGEN v0.3
* (поломка обратной совместимости) Переработан раздел
* (поломка обратной совместимости) Удалена опция
* ⚠️ Изменен способ передачи id сервиса в битовой карте. Теперь id генерируется в виде автоинкрементируемой константы. Это снизит количество конфликтов между различными ветками, т.к. числовые идентификаторы часто смещаются.
* Фикс дефекта. Теперь сервис помечается в битовой карте как проинициализированный только в том случае, если фабрика не вернула ошибку. В предыдущей версии логика могла приводить к панике при закрытии контейнера.
* (поломка обратной совместимости) Переработан раздел
errorHandling в конфигурации для более тонкого контроля генерируемого кода обработки ошибок.* (поломка обратной совместимости) Удалена опция
external для определений сервисов. При изучении кода не увидел в ней необходимости. Поэтому решил убрать.* ⚠️ Изменен способ передачи id сервиса в битовой карте. Теперь id генерируется в виде автоинкрементируемой константы. Это снизит количество конфликтов между различными ветками, т.к. числовые идентификаторы часто смещаются.
* Фикс дефекта. Теперь сервис помечается в битовой карте как проинициализированный только в том случае, если фабрика не вернула ошибку. В предыдущей версии логика могла приводить к панике при закрытии контейнера.
GitHub
Release v0.3.0 · strider2038/digen
What's Changed
handling service initialization errors by factories (method SetError marked as deprecated)
error handling options in config are rearranged to fine tune error code generation BC ...
handling service initialization errors by factories (method SetError marked as deprecated)
error handling options in config are rearranged to fine tune error code generation BC ...
Мне кажется отличный пример того случая, когда вместо добавления комментария можно было сделать сам код более выразительным. Комментарий виден только в приписке к методу, а имя функции видно еще и в месте где она вызывается.
#чистыйкод #рефакторинг
#чистыйкод #рефакторинг
Интересная тема заявлена на митапе
Транзакционность в DDD
Применение тактических паттернов DDD на практике неизбежно приводит к вопросам транзакционности. Как обеспечить согласованность данных, не нарушая границы агрегатов? В своем докладе расскажу, как я решаю эту проблему, разберу типичные ошибки и покажу, как правильно расставлять границы агрегатов для эффективной работы системы.
Forwarded from Evrone IT meetups
🚀 Митап по Go: Тактические паттерны DDD, weak pointers и операторы Kubernetes – 20 марта, 19:00
Программа митапа:
✔️ Применение тактических паттернов DDD на практике — Гонозов Дмитрий, Яндекс
Как обеспечить согласованность данных, не нарушая границы агрегатов? Дмитрий расскажет, как решает эту задачу в своей практике, разберет типичные ошибки и покажет, как правильно расставлять границы агрегатов для эффективной работы системы.
✔️ Разбор weak pointers в Go: механизм работы и влияние на управление памятью — Солдатенко Дмитрий, Ви.Tech
Go 1.24 принес изменения в работу с памятью: пакет weak был перемещён в публично доступные. Дмитрий объяснит, как устроены слабые указатели, когда их стоит использовать, а когда лучше выбрать другие подходы. Обсудим влияние на производительность и примеры из реальных проектов.
✔️ Разрабатываем операторы Kubernetes: как создать свои CRD — Михейкин Иван, Флант
Изучим, как разрабатывать операторы Kubernetes и проектировать пользовательские ресурсы (CRD), которые будут удобны как для пользователей, так и для автоматизации. Иван расскажет о том, как проектировать Conditions и Events, валидацию полей и соблюдение совместимости с IaC.
🧑🏻💻 Эксперт — Кирилл Кузин, Ви.Tech, Senior-разработчик на Go
🧑🏻💻 Модератор — Виталий Левченко,
Wildberries, engineering manager
➖➖➖
🗓 20 марта, начало в 19:00 мск, Четверг
🌐 ОНЛАЙН
✅ Ссылка на регистрацию
Партнер: Ви.Tech — это команда инженеров, которая строит IT для ВИ.ру — одной из крупнейших e-com компаний на рынке.
Для Go-разработчиков: свобода в архитектуре, сильная аналитика, высоконагруженные сервисы без легаси, возможность влиять на стек и research days.
Реклама ООО «Ви.Тех» erid: 2VfnxvLM4XS
Программа митапа:
Как обеспечить согласованность данных, не нарушая границы агрегатов? Дмитрий расскажет, как решает эту задачу в своей практике, разберет типичные ошибки и покажет, как правильно расставлять границы агрегатов для эффективной работы системы.
Go 1.24 принес изменения в работу с памятью: пакет weak был перемещён в публично доступные. Дмитрий объяснит, как устроены слабые указатели, когда их стоит использовать, а когда лучше выбрать другие подходы. Обсудим влияние на производительность и примеры из реальных проектов.
Изучим, как разрабатывать операторы Kubernetes и проектировать пользовательские ресурсы (CRD), которые будут удобны как для пользователей, так и для автоматизации. Иван расскажет о том, как проектировать Conditions и Events, валидацию полей и соблюдение совместимости с IaC.
🧑🏻💻 Эксперт — Кирилл Кузин, Ви.Tech, Senior-разработчик на Go
🧑🏻💻 Модератор — Виталий Левченко,
Wildberries, engineering manager
➖➖➖
🗓 20 марта, начало в 19:00 мск, Четверг
🌐 ОНЛАЙН
✅ Ссылка на регистрацию
Партнер: Ви.Tech — это команда инженеров, которая строит IT для ВИ.ру — одной из крупнейших e-com компаний на рынке.
Для Go-разработчиков: свобода в архитектуре, сильная аналитика, высоконагруженные сервисы без легаси, возможность влиять на стек и research days.
Реклама ООО «Ви.Тех» erid: 2VfnxvLM4XS
Please open Telegram to view this post
VIEW IN TELEGRAM
Перевозил сайты на новый хостинг и заодно решил стряхнуть пыль с полок и заняться своим журналом. Предыдущая версия журнала поддерживалась с помощью статического генератора сайтов Jekyll. Моментами это было неудобно: нужно было тянуть зависимости на Ruby, периодически от security бота github прилетали оповещения об уязвимостях (хотя для локальной работы они вообще не критичны). Тем временем где-то в Golang телеграм каналах периодически мелькал Hugo.
Читать далее https://igorlazarev.ru/p/new-blog-life-with-hugo/
Читать далее https://igorlazarev.ru/p/new-blog-life-with-hugo/
Игорь Лазарев
Новая жизнь журнала на Hugo
Перевозил сайты на новый хостинг и заодно решил стряхнуть пыль с полок и заняться своим журналом. Предыдущая версия журнала поддерживалась с помощью статического генератора сайтов Jekyll. Моментами это было неудобно: нужно было тянуть зависимости на Ruby…
👍2
Microsoft переписывает компилятор TypeScript на языке Go
https://gitverse.ru/blog/news/595-microsoft-perepisyvaet-kompilyator-typescript-na-yazyke-go
Настало время интересных историй под вечер пятницы 😊
https://gitverse.ru/blog/news/595-microsoft-perepisyvaet-kompilyator-typescript-na-yazyke-go
Настало время интересных историй под вечер пятницы 😊
👍1
Nullable или не nullable?
Пожалуй, одна из самых типичных проблем при составлении схем данных - стоит ли объявлять атрибуты с null-значениями? Стоит ли все атрибуты всегда делать nullable или это может привести к неприятным последствиям? В этой статье я постараюсь рассмотреть возможные проблемы nullable-атрибутов.
Читать далее: https://igorlazarev.ru/p/nullable-or-not-nullable/
Пожалуй, одна из самых типичных проблем при составлении схем данных - стоит ли объявлять атрибуты с null-значениями? Стоит ли все атрибуты всегда делать nullable или это может привести к неприятным последствиям? В этой статье я постараюсь рассмотреть возможные проблемы nullable-атрибутов.
Читать далее: https://igorlazarev.ru/p/nullable-or-not-nullable/
Игорь Лазарев
Nullable или не nullable?
Пожалуй, одна из самых типичных проблем при составлении схем данных - стоит ли объявлять атрибуты с null-значениями? Стоит ли все атрибуты всегда делать nullable или это может привести к неприятным последствиям? В этой статье я постараюсь рассмотреть возможные…
👍2
Багфикс-релиз digen v0.3.1
https://github.com/strider2038/digen/releases/tag/v0.3.1
исправлено
* убран лишний префикс в версии приложения
* поправлено генерирование фабричного метода в существующем файле, когда опция
https://github.com/strider2038/digen/releases/tag/v0.3.1
исправлено
* убран лишний префикс в версии приложения
v при установке приложения через go install* поправлено генерирование фабричного метода в существующем файле, когда опция
factories.returnError установлена в falseGitHub
Release v0.3.1 · strider2038/digen
What's Changed
small bug fixes by @strider2038 in #10
fix version prefix when go install used
fix factory generation error when file already exist
Full Changelog: v0.3.0...v0.3.1
small bug fixes by @strider2038 in #10
fix version prefix when go install used
fix factory generation error when file already exist
Full Changelog: v0.3.0...v0.3.1
👍4
Релиз новой фичи "внешние фабрики" digen v0.4.0
https://github.com/strider2038/digen/releases/tag/v0.4.0
В новой версии DI фабрики (функции конструкторы сервисов) могут быть описаны снаружи пакета DI контейнера. То есть генерируемый код вызова фабрики теперь может ссылаться на любой пакет текущего проекта. Для удобства указания импорта пакета (а это длинная строка) опции для определений сервисов (service definitions) теперь могут описываться в виде комментариев. Так же для работы этой фичи пришлось вынести
Для чего это сделано? Теперь фабрики можно будет располагать ближе к местам использования. Это уменьшит количество конфликтов в файлах фабрик.
Наглядный пример. В файле
Фабрика будет сгенерирована в директории проекта
https://github.com/strider2038/digen/releases/tag/v0.4.0
В новой версии DI фабрики (функции конструкторы сервисов) могут быть описаны снаружи пакета DI контейнера. То есть генерируемый код вызова фабрики теперь может ссылаться на любой пакет текущего проекта. Для удобства указания импорта пакета (а это длинная строка) опции для определений сервисов (service definitions) теперь могут описываться в виде комментариев. Так же для работы этой фичи пришлось вынести
lookup пакет наружу из внутреннего пакета internal, чтобы можно было ссылаться на контракт lookup.Container из любого участка кода (поломка обратной совместимости).Для чего это сделано? Теперь фабрики можно будет располагать ближе к местам использования. Это уменьшит количество конфликтов в файлах фабрик.
Наглядный пример. В файле
internal/definitions/container.go указываем ссылку на пакет.type UseCaseContainer struct {
// di: factory_pkg: example.com/project/internal/entities/products/di
FindEntity *usecase.FindEntity
}Фабрика будет сгенерирована в директории проекта
project/internal/entities/products/dipackage di
import (
"context"
"example.com/project/internal/entities/products/usecase"
"example.com/di/lookup"
)
func CreateUseCasesFindEntity(ctx context.Context, c lookup.Container) *usecase.FindEntity {
return usecase.NewFindEntity(c.Repositories().EntityRepository(ctx))
}
GitHub
Release v0.4.0 · strider2038/digen
What's Changed
new feature: outer factories
now DI factories can be described outside of internal package of DI containers
options for service definitions now can be descibed by comments
break...
new feature: outer factories
now DI factories can be described outside of internal package of DI containers
options for service definitions now can be descibed by comments
break...
❤2
Ого. Тут вышла мажорная версия golangci-lint v2.0 https://golangci-lint.run/product/changelog/
Неожиданно, если честно, но очень любопытно 🧐
Неожиданно, если честно, но очень любопытно 🧐
🔥1🤔1
Постепенно внедряю в свою жизнь как разработчика работу с популярными нейросетями. До этого момента в основном AI-инструменты использовал как “помогаторы” в написании кода (подсказчики типа Codeium), или для получения краткой выжимки по каким-то статьям или темам (нейро вкладка в Яндекс-поиске). Непосредственно чат-ботами с точки зрения практики пользовался редко, т.к. чаще всего непонятно а что их спрашивать-то? По специфическим вопросам пока они помогают не особо успешно (по экзотическим SQL запросам, например). В основном все равно приходится идти через документацию или ориентироваться на свои знания и опыт. Пару раз задавал вопросы по незнакомым мне темам (о строительстве, например) и в целом получал хорошие ответы.
Но тут на работе возникла такая потребность - нужно на основе метрик Prometheus и Grafana найти наиболее медленные endpoint’ы и сделать по ним дашборд...
Читать далее: https://igorlazarev.ru/p/deepseek-experience/
Но тут на работе возникла такая потребность - нужно на основе метрик Prometheus и Grafana найти наиболее медленные endpoint’ы и сделать по ним дашборд...
Читать далее: https://igorlazarev.ru/p/deepseek-experience/
Игорь Лазарев
Как DeepSeek помог мне быстро решить задачу по метрикам
Постепенно внедряю в свою жизнь как разработчика работу с популярными нейросетями. До этого момента в основном AI-инструменты использовал как “помогаторы” в написании кода (подсказчики типа Codeium), или для получения краткой выжимки по каким-то статьям или…
🔥1
В предыдущей статье я рассматривал какие риски в себе несут nullable-типы. В Golang такие данные обычно описываются с помощью атрибутов-указателей, но есть и другие способы. В этой статье я рассмотрю паттерн Null Type pattern, который уменьшит вероятность возникновения nil pointer panic.
Читать далее: https://igorlazarev.ru/p/go-null-type-pattern/
Читать далее: https://igorlazarev.ru/p/go-null-type-pattern/
Игорь Лазарев
Уменьшаем риск nil pointer panic с помощью Null Type pattern
В предыдущей статье я рассматривал какие риски в себе несут nullable-типы. В Golang такие данные обычно описываются с помощью атрибутов-указателей, но есть и другие способы. В этой статье я рассмотрю паттерн Null Type pattern, который уменьшит вероятность…
Активно погружаюсь в Agentic Coding и решил адаптировать свои либы для работы с ИИ тулзами. Обновление валидатора. Теперь будет проще фичи доставлять 😊))
muonsoft/validation v0.18.0
Обзор
Новая версия Go validation framework с поддержкой Go 1.24, улучшенным API для работы с нарушениями и новыми возможностями.
---
Новые возможности
Итератор по нарушениям (Go 1.23+)
Унифицированная функция UnwrapViolations
Добавлена
---
Технические изменения
- Go 1.24 — минимальная версия Go
- Обновление зависимостей:
-
-
muonsoft/validation v0.18.0
Обзор
Новая версия Go validation framework с поддержкой Go 1.24, улучшенным API для работы с нарушениями и новыми возможностями.
---
Новые возможности
Итератор по нарушениям (Go 1.23+)
ViolationList.All() возвращает iter.Seq2[int, Violation] и позволяет итерировать нарушения в range:for i, v := range violations.All() {
fmt.Printf("#%d: %s at %s\n", i, v.Message(), v.PropertyPath().String())
}Унифицированная функция UnwrapViolations
Добавлена
UnwrapViolations(err error) (*ViolationList, bool) — единая точка для извлечения нарушений из ошибки. Она обрабатывает и одиночное Violation, и ViolationList.UnwrapViolation и UnwrapViolationList помечены как deprecated в пользу UnwrapViolations.---
Технические изменения
- Go 1.24 — минимальная версия Go
- Обновление зависимостей:
-
github.com/muonsoft/language v0.3.1-
golang.org/x/text v0.33.0GitHub
Release v0.18.0 · muonsoft/validation
What's Changed
New
UnwrapViolations(err) — Single function to unwrap both a single Violation and ViolationList from an error. Use this instead of UnwrapViolation and UnwrapViolationList.
Viola...
New
UnwrapViolations(err) — Single function to unwrap both a single Violation and ViolationList from an error. Use this instead of UnwrapViolation and UnwrapViolationList.
Viola...
🔥1
