Pull to refresh

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-коде, если возвращаемый тип - интерфейс, то это большой красный флаг (код получится сильно связанным, т.к. развязываемся мы буквально одним способом - интерфейсом на стороне потребителя).

Sign up to leave a comment.

Information

Website
otus.ru
Registered
Founded
Employees
101–200 employees
Location
Россия
Representative
OTUS