Go Clean Architecture Template v0.0.4 (15.12.2025)
https://github.com/rostislaved/go-clean-architecture
- Сборка и запуск приложения теперь не в main, а в app.New() и app.Start()
- Файл конфига toml -> yaml
- Структуры конфигов находятся каждая в своем пакете, а не все в общем (стало возможно полностью, благодаря новой либе конфига)
- Обновлен конфиг линтеров до 2.6.0 (https://github.com/rostislaved/golangci-lint-config)
https://github.com/rostislaved/go-clean-architecture
- Сборка и запуск приложения теперь не в main, а в app.New() и app.Start()
- Файл конфига toml -> yaml
- Структуры конфигов находятся каждая в своем пакете, а не все в общем (стало возможно полностью, благодаря новой либе конфига)
- Обновлен конфиг линтеров до 2.6.0 (https://github.com/rostislaved/golangci-lint-config)
😁6👍1
Telegram Export Parser
Написал небольшой скрипт, который парсит экспорт чата телеграма
https://github.com/rostislaved/telegram-export-parser
Основная ценность скрипта в структуре, в которую парсится экспорт чата, она нетривиальная. Кроме нее там просто json.Unmarshal
- Запись только текста сообщений в файл (converted.txt).
- Печать сообщений в stdout в немного отформатированном виде
- Можно задать дату, сообщения до которой игнорируются
- Можно задать число сообщений, которое будет обрабатываться
Я это написал, чтобы в Gemini загружать экспорт чата и задавать по нему вопросы
Написал небольшой скрипт, который парсит экспорт чата телеграма
https://github.com/rostislaved/telegram-export-parser
Основная ценность скрипта в структуре, в которую парсится экспорт чата, она нетривиальная. Кроме нее там просто json.Unmarshal
- Запись только текста сообщений в файл (converted.txt).
- Печать сообщений в stdout в немного отформатированном виде
- Можно задать дату, сообщения до которой игнорируются
- Можно задать число сообщений, которое будет обрабатываться
Я это написал, чтобы в Gemini загружать экспорт чата и задавать по нему вопросы
1👍13😨2
vscode
сегодня я узнал, что режим сравнения в VS code можно запустить из терминала вот так:
что конкретно мне намного приятнее, чем через UI натыкивать:
Select for Compare и Compare with Selected
сегодня я узнал, что режим сравнения в VS code можно запустить из терминала вот так:
code --diff ./config ./config_bak
что конкретно мне намного приятнее, чем через UI натыкивать:
Select for Compare и Compare with Selected
👍5 4😁3 1
#книги
How To DeFi: Begginer
31.10.2025 - 30.12.2025
Короткая книга, которая могла быть еще короче, если бы не странные вставки скриншотов по созданию аккаунтов в разных приложениях.
В целом неплохо.
Из минусов:
- не нужны скрины создания аккаунта
- некоторые DeFi apps скорее всего уже устарели и лучше бы рассматривались концепции, а конкретные DeFi apps просто перечислялись
- возможно выбор DeFi apps был не случаен и как-то связан с авторами книги
- Не первое, что можно читать в крипте. Лучше уже понимать, хотя бы примерно, как работает биткойн\эфир\смартконтракты
В книге рассмотрены разные области мира Defi, что позволяет представить, что вообще бывает.
Чем больше читаю, тем больше ценю не огромные книги, а именно короткие с поверхностным обзором темы. После таких можно точечно почитать нужное уже в больших или загуглить. То есть сперва строится верхнеуровневая картина в голове, в потом детализируются нужные моменты.
How To DeFi: Begginer
31.10.2025 - 30.12.2025
Короткая книга, которая могла быть еще короче, если бы не странные вставки скриншотов по созданию аккаунтов в разных приложениях.
В целом неплохо.
Из минусов:
- не нужны скрины создания аккаунта
- некоторые DeFi apps скорее всего уже устарели и лучше бы рассматривались концепции, а конкретные DeFi apps просто перечислялись
- возможно выбор DeFi apps был не случаен и как-то связан с авторами книги
- Не первое, что можно читать в крипте. Лучше уже понимать, хотя бы примерно, как работает биткойн\эфир\смартконтракты
В книге рассмотрены разные области мира Defi, что позволяет представить, что вообще бывает.
Чем больше читаю, тем больше ценю не огромные книги, а именно короткие с поверхностным обзором темы. После таких можно точечно почитать нужное уже в больших или загуглить. То есть сперва строится верхнеуровневая картина в голове, в потом детализируются нужные моменты.
👍3 2
Почти конец года. Первую книгу в этом году я начал читать 2го января, а последнюю закончил 30го декабря. Всего 7 книг. Немало вроде как, но и немного. Когда-то было даже 15 штук. Но в 24м было всего 3. Вот такая статистика.
👍12 4❤1
slice-analyzer
Написал крошечный пакет для печати внутренней структуры слайса
https://github.com/rostislaved/slice-analyzer
Написал крошечный пакет для печати внутренней структуры слайса
https://github.com/rostislaved/slice-analyzer
package main
import (
sliceanalyzer "github.com/rostislaved/slice-analyzer"
)
func main() {
s1 := []int{1, 2, 3}
sliceanalyzer.Print(s1, "s1")
s2 := append(s1, 4, 5)
sliceanalyzer.Print(s2, "s2")
s3 := s2[1:4]
sliceanalyzer.Print(s3, "s3")
}
[s1]
┌───────┬───┬───┬───┐
│ slice │ 1 │ 2 │ 3 │
│ array │ 1 │ 2 │ 3 │
│ index │ 0 │ 1 │ 2 │
└───────┴───┴───┴───┘
┌─────────────┬──────────────┐
│ pointer │ 0xc00001a108 │
│ pointer dec │ 824633827592 │
│ len │ 3 │
│ cap │ 3 │
└─────────────┴──────────────┘
[s2]
┌───────┬───┬───┬───┬───┬───┬───┐
│ slice │ 1 │ 2 │ 3 │ 4 │ 5 │ ▒ │
│ array │ 1 │ 2 │ 3 │ 4 │ 5 │ 0 │
│ index │ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │
└───────┴───┴───┴───┴───┴───┴───┘
┌─────────────┬──────────────┐
│ pointer │ 0xc0000221b0 │
│ pointer dec │ 824633860528 │
│ len │ 5 │
│ cap │ 6 │
└─────────────┴──────────────┘
[s3]
┌───────┬───┬───┬───┬───┬───┐
│ slice │ 2 │ 3 │ 4 │ ▒ │ ▒ │
│ array │ 2 │ 3 │ 4 │ 5 │ 0 │
│ index │ 0 │ 1 │ 2 │ 3 │ 4 │
└───────┴───┴───┴───┴───┴───┘
┌─────────────┬──────────────┐
│ pointer │ 0xc0000221b8 │
│ pointer dec │ 824633860536 │
│ len │ 3 │
│ cap │ 5 │
└─────────────┴──────────────┘
🔥23 6❤1🤩1
придумал, как понять, один и тот же ли underlying array за слайсами - по адресу последнего элемента массива под слайсами!
У двух разных слайсов, которые имеют один и тот же underlying array он будет одинаковым.
Добавил отображение указателя последнего элемента в табличку, а также добавил цветное отображение id указателей, чтобы было легче сравнивать указатели разных слайсов.
UPD: заявление я сделал сильное) Данный подход не сработет для слайсов созданных через full slice expression ( s[low:high:max] )
У двух разных слайсов, которые имеют один и тот же underlying array он будет одинаковым.
Добавил отображение указателя последнего элемента в табличку, а также добавил цветное отображение id указателей, чтобы было легче сравнивать указатели разных слайсов.
UPD: заявление я сделал сильное) Данный подход не сработет для слайсов созданных через full slice expression ( s[low:high:max] )
🔥10
Лучшие актуальные книги по Golang
📦 База
- Jon Bodner - Learning Go (2024)
- Teiva Harsanyi - 100 Go Mistakes and How to Avoid Them (2022)
🌐 Веб-разработка
- Alex Edwards - Let's Go (2025)
- Alex Edwards - Let's Go Further (2025)
- Hüseyin Babal - gRPC Microservices in Go (2023)
🚀 Advanced topics
- James Cutajar - Learn Concurrent Programming with Go (2024)
- Thorsten Ball - 1. Writing an Interpreter in Go (2020)
- Thorsten Ball - 2. Writing A Compiler In Go (2020)
- Adam Woodbeck - Network Programming with Go (2021)
🗂 Чуть менее актуальные:
- Alan A. A. Donovan, Brian W. Kernighan - The Go Programming Language (2015)
Классика. Хорошая книга, но уже не такая актуальная. Можно дополнительно смотреть в ней интересующие главы.
- McGavren Jay - Head First Go (2019)
Не самая актуальная, но может быть полезной из-за акцента этой серии книг на простоту
📦 База
- Jon Bodner - Learning Go (2024)
- Teiva Harsanyi - 100 Go Mistakes and How to Avoid Them (2022)
🌐 Веб-разработка
- Alex Edwards - Let's Go (2025)
- Alex Edwards - Let's Go Further (2025)
- Hüseyin Babal - gRPC Microservices in Go (2023)
🚀 Advanced topics
- James Cutajar - Learn Concurrent Programming with Go (2024)
- Thorsten Ball - 1. Writing an Interpreter in Go (2020)
- Thorsten Ball - 2. Writing A Compiler In Go (2020)
- Adam Woodbeck - Network Programming with Go (2021)
🗂 Чуть менее актуальные:
- Alan A. A. Donovan, Brian W. Kernighan - The Go Programming Language (2015)
Классика. Хорошая книга, но уже не такая актуальная. Можно дополнительно смотреть в ней интересующие главы.
- McGavren Jay - Head First Go (2019)
Не самая актуальная, но может быть полезной из-за акцента этой серии книг на простоту
1❤6🔥3 3💩1
Clean Code 2nd Edition
Оказывается, 18.10.2025 вышло второе издание Чистого кода.
Вот как описаны изменения в предисловии:
Оказывается, 18.10.2025 вышло второе издание Чистого кода.
Вот как описаны изменения в предисловии:
Примечание о более ранних главах
Я позволил себе значительную свободу в отношении более ранних глав, единственным автором которых был я сам. Во многих случаях они были полностью переписаны или весьма существенно отредактированы. Большинство авторов глав, которые писал не я, представили для этой работы вторые издания своих глав.
Структура этой книги
Пожалуй, самым большим изменением между первым и вторым изданиями является структура материала. Я разделил книгу на четыре части: Код, Проектирование, Архитектура и Мастерство.
Эти части не являются независимыми друг от друга.
Часть I: Код в значительной степени зависит от Части II: Проектирование. Читая Часть I, вы встретите множество ссылок на принципы и стратегии проектирования, которые описаны в Части II. Я рекомендую использовать Часть II как справочник, к которому можно обращаться во время чтения Части I. Затем, закончив с Частью I, вам следует прочитать Часть II целиком.
Часть III: Архитектура представляет собой тщательно отредактированный и сокращённый набор фрагментов из моей книги Clean Architecture. И снова, рассматривайте её как справочный материал, помогающий лучше понять Часть I. Однако она также может использоваться самостоятельно — как простое введение в архитектурные принципы более высокого уровня.
Часть IV: Мастерство — это, в свою очередь, тщательно отредактированный и сокращённый набор фрагментов из моей книги Clean Craftsmanship — в частности, главы, посвящённые этике разработки программного обеспечения. Она включена для того, чтобы подчеркнуть: написание чистого кода является этическим императивом.
1🔥6🤯2💩2🙏1
Reading queue
У меня большая база книг, разделенная по темам. Она обладает следующими свойствами:
- Книги скорее всего хорошие (я определяю это по рейтингу амазона и goodreads). Хотя часть книг есть и плохих, но это, если мне все равно надо зачем-то в них смотреть
- Файлы книг там в лучшем качестве, что я смог найти. И мне не надо опять проделывать эту работу
- Книги в быстром доступе для меня, если надо что-то вспомнить
Но существовало две проблемы. Первая - я забывал, что я прочитал и когда, поэтому я начал вести список книг, которые прочитал. Особой необходимости в этом не было, просто мне это нравится.
А вторая существовала до текущего момента. Я забываю, какие книги я сохраняю в эту базу и какие из них я хотел бы прочитать.
Много раз было такое, что я находил потенциально интересную книгу и думал, что надо обязательно ее прочитать, но потом понимал, что я не помню ни одного названия такой книги. Поэтому решил создать Reading queue книг, которые хочу прочитать. Идея - располагать книги отсортированными по приоритету, так я и не забуду ни о чем и в порядке не запутаюсь.
Пока составлял список, понял, что в нем определенно есть книги, до которых я все же не доберусь, но они важны, как напоминание об определенной теме, а может и доберусь когда-то. Пока только первые книги в списке имеют порядок актуальный, после первых 10 порядок случайный т.к. до них еще далеко. Порядок этот будет постепенно корректироваться.
У меня большая база книг, разделенная по темам. Она обладает следующими свойствами:
- Книги скорее всего хорошие (я определяю это по рейтингу амазона и goodreads). Хотя часть книг есть и плохих, но это, если мне все равно надо зачем-то в них смотреть
- Файлы книг там в лучшем качестве, что я смог найти. И мне не надо опять проделывать эту работу
- Книги в быстром доступе для меня, если надо что-то вспомнить
Но существовало две проблемы. Первая - я забывал, что я прочитал и когда, поэтому я начал вести список книг, которые прочитал. Особой необходимости в этом не было, просто мне это нравится.
А вторая существовала до текущего момента. Я забываю, какие книги я сохраняю в эту базу и какие из них я хотел бы прочитать.
Много раз было такое, что я находил потенциально интересную книгу и думал, что надо обязательно ее прочитать, но потом понимал, что я не помню ни одного названия такой книги. Поэтому решил создать Reading queue книг, которые хочу прочитать. Идея - располагать книги отсортированными по приоритету, так я и не забуду ни о чем и в порядке не запутаюсь.
Пока составлял список, понял, что в нем определенно есть книги, до которых я все же не доберусь, но они важны, как напоминание об определенной теме, а может и доберусь когда-то. Пока только первые книги в списке имеют порядок актуальный, после первых 10 порядок случайный т.к. до них еще далеко. Порядок этот будет постепенно корректироваться.
1👍4 2
Chris Richardson - Microservices Patterns
Chris Richardson пишет второе издание своей книги. По планам релиз весной 2027
Ниже - что будет нового во втором издании.
tldr (полная версия в комментариях):
Особо ничего непонятно конечно, но будем думать, что там что-то нормальное
Chris Richardson пишет второе издание своей книги. По планам релиз весной 2027
Ниже - что будет нового во втором издании.
tldr (полная версия в комментариях):
- Книга сильно обновлена на основе практики последних лет.
- Главный акцент - fast flow: быстрые мелкие изменения + быстрый feedback.
- Fast flow держится на трех вещах: Team Topologies, DevOps, подходящая architecture.
- Больше внимания архитектурным основам: coupling, quality attributes, устройство architecture.
- Расширен раздел про принятие решений: как выбирать между monolith и microservices, 10 сил для оценки решений, пошаговый процесс проектирования.
Особо ничего непонятно конечно, но будем думать, что там что-то нормальное
❤3🤣1 1
#книги
Daniel Kahneman - Thinking, Fast and Slow
30.12.2025 - 21.02.2026
В русском переводе название звучит "Думай медленно, решай быстро", но в книге не говорится о том, что надо что-то быстро решать, это неудачный перевод. В оригинале название - Thinking, Fast and Slow, что гораздо более точно отражает представленную модель мышления в книге: есть две системы, одна быстрая, но подвержена ошибкам, а вторая медленная, более энергозатратная, но умная. В частности из-за этого перевода и из-за других своих ожиданий я рассчитывал получить все же больше каких-то практических рекомендаций, но в итоге эта книга - скорее описание мышления и разных неочевидных его нюансов.
Одним из самых полезных было именно описание модели мышления из двух систем. Например, именно система 1 ответственна за быстрый (и часто неверный) ответ на задачу:
>Если 5 машин за 5 минут делают 5 деталей, сколько времени нужно 100 машинам для 100 деталей?
А если мы потрудимся и подумаем (включим систему 2), то с большей вероятностью найдем верный ответ. Но трудиться сложнее, чем не трудиться, поэтому часто решение принимает система 1.
В остальном для развития мышления лучше прочитать книгу по логике.
Сложно сказать, было ли полезно читать книгу или нет. Абсолютно бесполезной не назвать, но и обратное сказать сложно. Наверное, соотношение полезности к числу страниц для меня вышло меньше, чем мне бы того хотелось, в ней много болтовни и мало выводов.
В любом случае я рад, что прочитал, ибо давно хотел, и если бы не прочитал, то все еще бы хотел и это бы меня мучило)
Daniel Kahneman - Thinking, Fast and Slow
30.12.2025 - 21.02.2026
В русском переводе название звучит "Думай медленно, решай быстро", но в книге не говорится о том, что надо что-то быстро решать, это неудачный перевод. В оригинале название - Thinking, Fast and Slow, что гораздо более точно отражает представленную модель мышления в книге: есть две системы, одна быстрая, но подвержена ошибкам, а вторая медленная, более энергозатратная, но умная. В частности из-за этого перевода и из-за других своих ожиданий я рассчитывал получить все же больше каких-то практических рекомендаций, но в итоге эта книга - скорее описание мышления и разных неочевидных его нюансов.
Одним из самых полезных было именно описание модели мышления из двух систем. Например, именно система 1 ответственна за быстрый (и часто неверный) ответ на задачу:
>Если 5 машин за 5 минут делают 5 деталей, сколько времени нужно 100 машинам для 100 деталей?
А если мы потрудимся и подумаем (включим систему 2), то с большей вероятностью найдем верный ответ. Но трудиться сложнее, чем не трудиться, поэтому часто решение принимает система 1.
В остальном для развития мышления лучше прочитать книгу по логике.
Сложно сказать, было ли полезно читать книгу или нет. Абсолютно бесполезной не назвать, но и обратное сказать сложно. Наверное, соотношение полезности к числу страниц для меня вышло меньше, чем мне бы того хотелось, в ней много болтовни и мало выводов.
В любом случае я рад, что прочитал, ибо давно хотел, и если бы не прочитал, то все еще бы хотел и это бы меня мучило)
1❤7 2
Martin Kleppmann - Designing Data-Intensive Applications
Во втором издании Кабанчика в схемах объясняющих уровни изоляции транзакций поменяли имена
(Alice и Bob - это условные персонажи, которые используются в информатике, криптографии и теории протоколов для объяснения взаимодействия между сторонами.)
Во втором издании Кабанчика в схемах объясняющих уровни изоляции транзакций поменяли имена
(Alice и Bob - это условные персонажи, которые используются в информатике, криптографии и теории протоколов для объяснения взаимодействия между сторонами.)
😁9🤮7🤔3❤1 1
у меня сегодня день вайбкодинга... Ощущения отвратительные.
Всё же мне нравится писать код самому
Всё же мне нравится писать код самому
👍20😁7❤4
samber/lo
https://github.com/samber/lo
ура!
После долгих уговоров в самом популярном issue (примерно с Марта 2022го) в либу добавляются варианты функций, которые возвращают ошибки (это пока еще pr, но он от мейнтейнера, так что скоро будет).
Раньше можно было так:
но вот так уже было нельзя:
Теперь же будет можно:
И аналогично для многих других функций (еще некоторые добавятся в отдельных pr).
https://github.com/samber/lo
ура!
После долгих уговоров в самом популярном issue (примерно с Марта 2022го) в либу добавляются варианты функций, которые возвращают ошибки (это пока еще pr, но он от мейнтейнера, так что скоро будет).
Раньше можно было так:
ids := []int{1, 2, 3}
idsStr := lo.Map(ids, func(id int, _ int) string {
return strconv.Itoa(id)
})
// idsStr = []string{"1", "2", "3"}но вот так уже было нельзя:
idsStr := []string{"1", "2", "3"}
ids := lo.Map(
idsStr,
func(idStr string, _ int) int {
id, err := strconv.Atoi(idStr)
if err != nil {
// что делать с err?
}
return id
},
)Теперь же будет можно:
ids, err := lo.MapErr(
idsStr,
func(idStr string, _ int) (int, error) {
id, err := strconv.Atoi(idStr)
if err != nil {
return 0, err
}
return id, nil
},
)
И аналогично для многих других функций (еще некоторые добавятся в отдельных pr).
❤5👍4
Грязная архитектура
Наткнулся на очередной репозиторий по "чистой архитектуре". 1к звезд между прочим! Наверное что-то крутое. Смотрим первым делом на юзкейс:
https://github.com/khannedy/golang-clean-architecture/blob/main/internal/usecase/user_usecase.go
1. Импорт gorm
2. Импорт Fiber
3. Импорт интерфейса Repository из пакета Repository
4. Явный вызов бд транзакций в юзкейсе
...
Другие файлы открывать просто нет смысла
Если бы у меня была задача сделать репозиторий максимально противоречащий чистой архитектуре, то я бы вряд ли справился лучше, чем тут
Наткнулся на очередной репозиторий по "чистой архитектуре". 1к звезд между прочим! Наверное что-то крутое. Смотрим первым делом на юзкейс:
https://github.com/khannedy/golang-clean-architecture/blob/main/internal/usecase/user_usecase.go
1. Импорт gorm
2. Импорт Fiber
3. Импорт интерфейса Repository из пакета Repository
4. Явный вызов бд транзакций в юзкейсе
...
Другие файлы открывать просто нет смысла
Если бы у меня была задача сделать репозиторий максимально противоречащий чистой архитектуре, то я бы вряд ли справился лучше, чем тут
Preston Thorpe
Есть такой проект Turso - это "SQLite на rust".
Так вот оказывается один из ее топ контрибьютеров, а теперь уже сотрудник работает из тюрьмы, где у него большой срок.
Вот его история и продолжение
Linkedin: https://www.linkedin.com/in/pthorpe92/
На гитхабе жесть: https://github.com/PThorpe92
Есть такой проект Turso - это "SQLite на rust".
Так вот оказывается один из ее топ контрибьютеров, а теперь уже сотрудник работает из тюрьмы, где у него большой срок.
Вот его история и продолжение
Linkedin: https://www.linkedin.com/in/pthorpe92/
На гитхабе жесть: https://github.com/PThorpe92
Курс по чистой архитектуре и DDD
Хотел бы поделиться вот этим курсом:
https://microarch.ru/courses/ddd/languages/go
Это лучшее, что я встречал по теме. Считаю, что просто великолепный материал - на порядок лучше всего, что я когда-либо видел на ютубе.
- Отличная подача, структурированно и последовательно
- Отсутствие ошибок! Это редкость в принципе: на ютубе и примерах на гитхабе их миллионы.
- Шикарнеший набор тем
Если вы не знаете, какие вам знания нужны в архитектуре приложений, то в этом курсе все, что вам нужно. Даже не сомневайтесь
Хотел бы поделиться вот этим курсом:
https://microarch.ru/courses/ddd/languages/go
Это лучшее, что я встречал по теме. Считаю, что просто великолепный материал - на порядок лучше всего, что я когда-либо видел на ютубе.
- Отличная подача, структурированно и последовательно
- Отсутствие ошибок! Это редкость в принципе: на ютубе и примерах на гитхабе их миллионы.
- Шикарнеший набор тем
Если вы не знаете, какие вам знания нужны в архитектуре приложений, то в этом курсе все, что вам нужно. Даже не сомневайтесь
❤3