Size: a a a

2020 December 10

 P

 ‌‌Gleb Pilipets... in Go-go!
Zver
И пакет инициализировать это как? Статические данные или у вас глобальная переменная какая?
Ну вот пример, который мне приходит на мысль.

Есть контролёры в веб-сервисе как handleFunc. Теперь когда вызывается обработчик, то контролер должен как-то обратиться к системе на обработку запроса - получается, что либо создавать ивенты, либо сохранить глобальными переменными для пакета указатель на фасад системы? Во втором случае нужно до этого проинициализировать пакет
источник

Z

Zver in Go-go!
Artyom
Типа да)
Не делайте так.
источник

A

Artyom in Go-go!
А как? Мы просто думали в мейне сделать

InitFoo, initBar, ... И все. @ex_sales это ты виноват)
источник

Z

Zver in Go-go!
 ‌‌Gleb Pilipets
Ну вот пример, который мне приходит на мысль.

Есть контролёры в веб-сервисе как handleFunc. Теперь когда вызывается обработчик, то контролер должен как-то обратиться к системе на обработку запроса - получается, что либо создавать ивенты, либо сохранить глобальными переменными для пакета указатель на фасад системы? Во втором случае нужно до этого проинициализировать пакет
Создавай сущность в которой хранится состояние. Не храните состояния в пакете.
источник

 P

 ‌‌Gleb Pilipets... in Go-go!
Zver
Создавай сущность в которой хранится состояние. Не храните состояния в пакете.
Так в пакете не состояние, а указатель на сущность
источник

Z

Zver in Go-go!
Зачем? Указатель это уже состояние фактически.
источник

 P

 ‌‌Gleb Pilipets... in Go-go!
Ну а как тогда обратится из контролёра к системе?
источник

Z

Zver in Go-go!
Из какого контролера, к какой системе? Если правильно понимаю, то передавать в контролер ссылку на систему(не знаю, что под этим понимается)
источник

Z

Zver in Go-go!
Связывайте объекты с друг другом, а не через глобальные состояния.
источник

Z

Zver in Go-go!
DI.
источник

 P

 ‌‌Gleb Pilipets... in Go-go!
Zver
Из какого контролера, к какой системе? Если правильно понимаю, то передавать в контролер ссылку на систему(не знаю, что под этим понимается)
Так я об этом же.
В контролёре передаётся указатель на систему, который сохраняется в vars пакета
источник

Z

Zver in Go-go!
Тогда можете хоть сотни обектов параллельно создавать и тестировать. И не будет никаких интерференций.
источник

Z

Zver in Go-go!
 ‌‌Gleb Pilipets
Так я об этом же.
В контролёре передаётся указатель на систему, который сохраняется в vars пакета
Зачем его сохранять в var пакета?
источник

Z

Zver in Go-go!
Передали при инициализации по другим объектам и выбросили.
источник

 P

 ‌‌Gleb Pilipets... in Go-go!
Zver
Зачем его сохранять в var пакета?
http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {  fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) })

Вот пример хендлера, контролера. При получении запроса ему нужно его обработать как-то - для этого он обращается к Мейн части приложения, некому фасаду, который сохранён в vars пакета.

Это указатель, который инициализируется извне пакета
источник

Z

Zver in Go-go!
 ‌‌Gleb Pilipets
http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {  fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) })

Вот пример хендлера, контролера. При получении запроса ему нужно его обработать как-то - для этого он обращается к Мейн части приложения, некому фасаду, который сохранён в vars пакета.

Это указатель, который инициализируется извне пакета
Создаете объект с хендлерами и напихиваете хендлеры в сервер. В сами объекты сохраняете все необходимы даныые, логер, ДБ, очереди и всякую шелуху. Не надо ее в глобале держать.
источник

 P

 ‌‌Gleb Pilipets... in Go-go!
Хм
источник

A

Artyom in Go-go!
Я суть понял.

Держать в структурах данные. Не в глобальных переменных. Передавать структуры из компонента в компонент. Посмотрим, может отрефакторим.
источник

Z

Zver in Go-go!
 ‌‌Gleb Pilipets
http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {  fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) })

Вот пример хендлера, контролера. При получении запроса ему нужно его обработать как-то - для этого он обращается к Мейн части приложения, некому фасаду, который сохранён в vars пакета.

Это указатель, который инициализируется извне пакета
Почитайте про Dependency Injection. Что-то прям в последнее время на эту тему прет.
источник

Z

Zver in Go-go!
https://habr.com/ru/company/funcorp/blog/372199/
Что-то примерно такое. Но вообще статей на эту тему много.
источник