built-in функцию copy для пришельцев придумали?) Никто также не запрещает сделать append(dst, src...). Всё это справедливо для слайсов, но никто не мешает кастить массивы в слайсы и назад, хоть это и муторно (append не сработал, но copy - вполне себе):
package main
import "fmt"
func main() {
var a [2]int = [2]int{1, 2}
var b [2]int
fmt.Println(a)
copy(b[:], a[:])
fmt.Println(b)
}
Никакой, смысл тестировать мэйн? Раз так хочется покороче - разбил инициализацию зависимостей по подпакетам (условный cmd/{название-проекта}/bootstrap/*, и там инициализируешь всё, что нужно, а сами Init-ы дёргаешь в мэйне. Можешь даже тесты прикрутить, кто тебе мешает
Явный DI > Wire/fx/другие подобные решения. Для инициализации зависимостей можно делать отдельные пакеты/подпакеты в cmd, если уж такой большой проект, но только не IoC-контейнеры, с которыми выстрелить в ногу легче простого. (Как минимум в Go)
Ну и не понимаю, хоть убейте, зачем для структурированного логирования использовать что-то иное кроме zap, который почти что стандартом стал.
Также не знаком с gin, однако судя по приставке Should у вас свалится паника, если не смаппится запрос. Может проще адекватно вернуть ошибку? Паника - это про фатал-кейсы, тут у нас просто плохой запрос, т.е. ошибка данных, но никак не фатальная ошибка, способная всё повалить.
И зачем логировать ошибку в сервисе, если её можно пробросить на самый верхний уровень и уже там корректно обработать в одном месте как нужно?
Optional можно легко сделать собственной обёрткой а-ля:
type Optional[V any] struct {
defined bool
value V
}
// И пара-тройка хелперов к нему
Всё на стеке, легко проверяется на "nil", и нет путаницы с валидными нулевыми значениями если отказаться от указателей. Так делают в sql пакете, например: https://pkg.go.dev/database/sql#NullInt64
Из-за этого бага приостановили раскатку обновления 25.04, здесь было описано: https://www.gamingonlinux.com/2025/04/ubuntu-25-04-upgrades-halted-due-to-kubuntu-users-getting-a-broken-desktop/
built-in функцию copy для пришельцев придумали?)
Никто также не запрещает сделать append(dst, src...).
Всё это справедливо для слайсов, но никто не мешает кастить массивы в слайсы и назад, хоть это и муторно (append не сработал, но copy - вполне себе):
sqlx > gorm, умеет такое же, но не приносит все минусы ORM-ок. Ещё и квери билдер удобный
Никакой, смысл тестировать мэйн?
Раз так хочется покороче - разбил инициализацию зависимостей по подпакетам (условный cmd/{название-проекта}/bootstrap/*, и там инициализируешь всё, что нужно, а сами Init-ы дёргаешь в мэйне. Можешь даже тесты прикрутить, кто тебе мешает
Явный DI > Wire/fx/другие подобные решения.
Для инициализации зависимостей можно делать отдельные пакеты/подпакеты в cmd, если уж такой большой проект, но только не IoC-контейнеры, с которыми выстрелить в ногу легче простого. (Как минимум в Go)
Ну и не понимаю, хоть убейте, зачем для структурированного логирования использовать что-то иное кроме zap, который почти что стандартом стал.
Также не знаком с gin, однако судя по приставке Should у вас свалится паника, если не смаппится запрос. Может проще адекватно вернуть ошибку? Паника - это про фатал-кейсы, тут у нас просто плохой запрос, т.е. ошибка данных, но никак не фатальная ошибка, способная всё повалить.
И зачем логировать ошибку в сервисе, если её можно пробросить на самый верхний уровень и уже там корректно обработать в одном месте как нужно?
Optional можно легко сделать собственной обёрткой а-ля:
Всё на стеке, легко проверяется на "nil", и нет путаницы с валидными нулевыми значениями если отказаться от указателей. Так делают в sql пакете, например: https://pkg.go.dev/database/sql#NullInt64