Бытует мнение, что библиотека инструментов Go беднее, чем у Python или Java. Я полностью согласен. Причина в том, что это относительно новый язык, у которого отличается методология разработки и поддержки, философия применения.
Разрабатывая программу на Go, мы часто изобретаем велосипед. Потому что, согласно философии языка, лучше написать что-то маленькое и своё, чем использовать то, что написано другим разработчиком и залито на Github. Сам язык говорит, что это не Go way — не путь языка, такое выражение используют известные в этой среде специалисты.
Сам по себе язык не может удовлетворять всем возможным обобщениям. Например, Java Spring повёрнут на рефлексии, ведь как иначе написать универсальный фреймворк, который подходит для любого бэкенда? К сожалению, рефлексия и различные антипаттерны — тоже не Go way, потому что ценности Go — изящность и производительность.
В результате, если у Go есть библиотеки, то они узкоспециализированные — как Ableton, c коллекциями и узкими кейсами. Но мне кажется, что всегда нужно задавать вопрос: а стоит ли подтягивать целую библиотеку, если можно просто написать маленькую часть того, что нужно? Иногда тулинги пытаются удовлетворить потребности конкретно ваших задач и доменной области. И тогда используют рефлексию — например,
Gorm, самую популярную ORM. Но более «трушные» Golang-разработчики всё равно пытаются уходить в кодогенерацию.
Кодогенерация — настоящая отдушина. Для этого у нас есть различные swagger-codegen, openAPI-codegen и SQL-билдеры. И что-то похожее на ORM — как
Ent от запрещённой в России компании Meta, которая безумно классно умеет генерировать по вашей модели конкретный код из БД под те типы и тот нейминг, которые заданы в схеме. Таким образом мы совершенно не пользуемся рефлексией и даже имеем статический анализ SQL-запросов.