🏁Александр
только если читать прямо из файлв внутри init
🏁Александр
но это не очень кашерно
Alexey
А как лучше?
🏁Александр
передача параметров из main лучше
🏁Александр
в моем примере есть функция NewConnect
🏁Александр
вот ее вызываете в main
🏁Александр
в остальный GetConnect
🏁Александр
(помните что если переменная или функция не начинается с заглавной буквы, она не доступна вне пакета)
Alexey
Понял, спасибо)
Alexey
А можно как-нибудь достучаться к глобальной пременной созданной в main пакете из других пакетов подключаемых в main?
🏁Александр
нет
Alexey
Изначально пытался сделать что-то вроде единого объекта приложения и хранить в нём подключение к БД, логер и тд.
type Application struct {
db *gorm.DB
}
func (a *Application) GetDB() *gorm.DB {
return a.db
}
var App *Application
func main() {
db, err := appDb.GetConnection()
if err != nil {
fmt.Println("DB connection failed: " + err.Error())
return
}
defer db.Close()
App = &Application{
db: db,
}
}
Alexey
Но обламался на доступе(
🏁Александр
нормально в принципе
🏁Александр
его в отдельный пакет оформите просто
🏁Александр
application
Alexey
ПОнял
🏁Александр
и дальше как бд
🏁Александр
щаз же вия разбудите
Alexey
Olzhas
Zloy-Dobry
Ебать, какой жирный
Ευγένιος
Нода, пыха.
Вы че обливаетесь дерьмом?
Ευγένιος
Ало.
Ευγένιος
Суббота что ли?
Aleksandr
узнаю туповатый троллинг неоднократно баненного
Olzhas
Ευγένιος
Точно суббота.
Olzhas
У меня отпуск с понедельника
Olzhas
Какой-то тип нахваливал ноду и поливал грязью го
Olzhas
Он просто про пхп не знал наверное
Olzhas
Так бы все нахваливал, кроме ноды
Olzhas
Ибо в пятницу было д.р. солнцеликого
Olzhas
Olzhas
Это все знают
Ευγένιος
А пыхерей в говно.
Olzhas
Olzhas
В принципе, программирование вообще говно
Olzhas
Лучше бы автослесарем работал
Olzhas
В мире питона не бывает
Ευγένιος
Ну да, я эту тему и несу.
Alexey
один раз
Решил делать не через init() и видимо опять наступил на грабли
Реализовал пакет DB вот таким образом
var connect *gorm.DB
func GetConnection() (*gorm.DB, error) {
if connect != nil {
return connect, nil
}
connect, err := gorm.Open("postgres", "host=localhost port=5432 user=user dbname=db password=pass")
if err != nil {
connect = nil
}
return connect, err
}
в пакете main вызываю функцию GetConnection в надежде инициализировать переменную connect, но при вызове из других пакетов она пересоздаётся. В итоге не удалось сделать объект подключения глобальным
Как стоит исправить код?
🏁Александр
я уже в метро :(
🏁Александр
проверь внимательно после первого вызова полная ли переменная
🏁Александр
или может горм откинул nil туда
🏁Александр
распечатай перед ретурном
Alexey
Сейчас проверю. Gorm иногда преподносит сюрпризы)
Alexey
Вернул в коннект объект. Оно не nil
🏁Александр
@onokonem помоги человеку, я афк :)
🏁Александр
🏁Александр
https://4gophers.ru/articles/singlton-pattern-na-go/#.W0DKrRZn3YU
🏁Александр
пролистайте вниз там пример с синглатоном
Alexey
🏁Александр
тогда ясно
🏁Александр
выше прочитайте
Alexey
Да да, сылочку увидел, читаю, спасибо
🏁Александр
самый последний пример
Anonymous
Anonymous
чтобы функция возвращала элемент как с канала
Aleksandr
Канал надо вернуть в функции
Anonymous
Vadim
Сделай канал, и попроси функцию слать в этот канал
Anonymous
Aleksandr
Что не работает? В канал то слать надо, чтобы получить из него
Anonymous
Aleksandr
Ну слушай, почитай доку. Делай буферизованный канал
Anonymous
все норм
Anonymous
а поч из-за небуферизованного канала поток виснет
Aleksandr
Потому что нельзя в канал слать данные, если их ещё не получили оттуда
Anonymous
ясн
Мерль
Мерль
Что не работает?
Какое поведение ты ожидаешь?
Мерль
а
Pawel
найди в себе силы и выдели себе 2-3 дня на изучение Го, а?
Slava
тур можно пройти за пару часов
Oleg
кто-то пользует монорепо?