Comments 6
Мало того, что выглядит, как натягивание java-совы на голбус, так еще и запихивание обсерверов в кота - мягко говоря, как минимум, нарушение single-responsibility
Вопрос к гоферам-практикам: кто-нибудь в таком виде использует OOP full-паттерны в Go в проектах? Интересует опыт применения, например, синглтон вроде не припомню, чтобы я видел где-нибудь. По-моему, смотрится не очень, и, имея встроенные возможности языка и типы, это всё выглядит чужеродно, имхо.
Синглтон используется, например, когда нужно конфиг 1 раз тяжело проинициализировать (не спрашивайте, зачем, сам не знаю, у меня никогда не было тяжело инициализирующихся конфигов). Поскольку делается это 1 раз, паттерн имеет смысл:
type Config struct {}
var instance Config
var once sync.Once
func GetConfig() *Config {
once.Do(func() {
err := cleanenv.ReadEnv(&instance)
if err != nil {
// ...
}
// ...
})
return &instance
}Синглтон - вещь чисто академическая.
Нужно один раз сделать - сделайте один раз хоть в main хоть в init хоть в глобальной (в модуле) переменной (которую можно инициализировать функцией).
Зачем нужно дергать инициализацию того, что нужно инициализировать один раз несколько раз из разных горутин - мне не понятно.... возможно потому что ну ни разу такого не нужно было на практике.
Бывает необходимость проследить, что ресурс не закрываетс два раза - но оно проще решается через atomic.
Я на го не пишу, но для меня интерфейс с единственным методом и пустые структуры, реализующие его, выглядят странно. В го функции являются объектами первого класса, поэтому в этом случае проще использовать именно их.
Нет конечно. В Go типизация другая, поэтому ситуаций, когда интерфейс должен быть описан "там, где он реализуется", а не "там, где он потребляется", примерно 3, и все уже есть стандартной библиотеке. Иначе говоря, в go-коде, если возвращаемый тип - интерфейс, то это большой красный флаг (код получится сильно связанным, т.к. развязываемся мы буквально одним способом - интерфейсом на стороне потребителя).
5 паттернов проектирования в Go на примере котиков