Задать вопрос
@vGrabko99
html, css, js, php, golang, mysql

Как сделать переменную глобальной на все пакеты в golang?

Дополнение к этому вопросу

Здесь я создал глобальную переменную для пакета main. Теперь мне необходимо эту переменную передать во все остальные пакеты. Как можно это сделать без явной передачи во время вызова функции с другого пакета? Зарание спасибо.
  • Вопрос задан
  • 4634 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 3
mututunus
@mututunus
Backend developer (Python, Golang)
Никак.
Ответ написан
Комментировать
@mantyr
Пишу много Golang кода с удовольствием:)
Есть такая штука, называется "инициализация". Вы в main пакете инициализируете всё что вам нужно, например:
1. инициализируете доступ к BD
2. инициализируете свои пакеты с бизнес логикой
3. инициализируете другие какие-то пакеты которые вам нужны в main
При этом при инициализации пакета которому нужен доступ к BD, вы просто передаёте ему ссылку на уже открытый дескриптор.
package main
import "mypackage"
// import DB package

var DB *sql.DB

func init() {
   DB = sql.Open()
   mypackage.DB = DB
}

func main() {
   mypackage.myfunction1() 
   mypackage.myfunction2()
}
Ответ написан
index0h
@index0h
PHP, Golang. https://github.com/index0h
- Хочу выстралить себе в ногу, эти подойдут?
- Берите разрывные, так надежнее))

---------

Глобальные переменные - это зло, вы ни в коем случае НЕ ДОЛЖНЫ ЭТОГО ХОТЕТЬ!
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
artem_kovardin
@artem_kovardin
Вам сначала книгу почитать, мануалы. А потом уже задавать вопросы.
Ответ написан
За такое надо в угол ставить!
Ответ написан
@voltag
Вот неплохой механизм передачи, с плюшками и оговорками, называется environment-variables.
И доступ к БД можно трактовать как переменную окружения
https://gobyexample.com/environment-variables
Пользуйтесь на здоровье, но в меру.

package conf

func init() {
//Здесь может быть, к примеру, погрузка данных из конфигурационных файлов
      s:="hello global world";
      os.Setenv("MyGlobalEnv", s);
}

package my_programm

func main() {
   fmt.Println("global_var:", os.Getenv("MyGlobalEnv"))
}


и не обращайте внимание на троллей потрясающих "углами", "мануалами", "пулями" и "никаками" им же надо как-то поддерживать своё ЧСВ
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы