Tony
2022/04/26 18:50:40 DB-OK
Tony
По идее должно было напечатать: log.Println("err")
Tony
Или механизм какой-то более сложный?
Denis
подскажите как в slice проверить содержится ли конкретное значение? По аналогии оператора In в других языках?
Herman
Циклом
Ron Mount
Педалируй велосипедик дружок
Denis
классный язык) мне нравится......
Alexander
Ошибка nil
Потому что если файла нет, оно создаёт. Попробуй права на папку или на файл сделать такие, что запускающий юзер не может открыть и писать
Alexander
Или диск до краёв заполни
Alexander
Ручками файлик проверяй есть или нет
Alexander
Но вообще да, пингануть не мешает. Но тут логика подсказывает, что это всё равно не поможет, и тупо создастся файл. А может ошибаюсь, конечно
🅞leksiy
Правда я через gorm с sqlite работал, файл всегда создается, если его нет
Alexander
Alexey
а что он создает то?)
Alexey
func main() { _, err := sql.Open("sqlite3", "/dev/full/mydb.db") if err != nil { log.Println("err") panic(err) } log.Println("DB-OK") } 2022/04/26 12:21:47 DB-OK
Alexey
🤔
Alexey
в /dev/full/, очевидно, он ничего создать не смог бы
Alexander
пингани
Alexander
опен по идее создает только конфигурацию. подключение к нормальным базам тестится только при пинге
Alexander
как склайт себя ведет - не знаю
Alexey
а, во. ping не прошел
Tony
а, во. ping не прошел
У меня и пинг проходит. ФАйл не создается. Даже sqlite нет на компе. ОС Win11
Alexey
ставь пг и не парься)
Alexander
У меня и пинг проходит. ФАйл не создается. Даже sqlite нет на компе. ОС Win11
склайт не может быть "на компе", в твое приложение встраивается
Alexander
Даже dll не нужны? 😳
ты каким драйвером пользуешься? дай ссылку
Alexander
ставь пг и не парься)
тем более ща с докером можно с ползвезды поднять себе
Alexander
что значит бронировать? что значит локальный? 127.*.*.*?
Tony
тем более ща с докером можно с ползвезды поднять себе
пг на докер, пробросить порт и звонить с приложения?
Alexander
github.com/mattn/go-sqlite3
sqlite3-binding.c sqlite3-binding.h вот сорсы вроде, он их копирует просто в репо
Alexander
ты хочешь через много сокетов машины открывающей соединения заменить на 1?
Alexander
ну так просто спрошу, лимит не пробовал расширять? может быть достаточно
Alexander
ну и вопрос? реально ли нужно держать эти соединения?
Alexander
лул)
𝙲𝚊𝚝𝚒𝚘𝚗
Tony
Можешь прям в корне создать папку migrations
А как правильно коннект к БД сохранить, что бы не конектиться каждый раз. type DBCON struct{ dbo *sql.DB } func (d *DBCON) ConnectSqlite(dbname string) { db, err := sql.Open("sqlite3", "uslugi.db") if err != nil { log.Println("err") panic(err) } err = db.Ping() if err != nil { log.Println("err") panic(err) } log.Println("DB-OK") d.dbo = db } И потом по всему коду использовать dbo ? Или вместо структуры просто переменную лучше? var dbo *sql.DB func ConnectSqlite(dbname string) { db, err := sql.Open("sqlite3", "uslugi.db") if err != nil { log.Println("err") panic(err) } err = db.Ping() if err != nil { log.Println("err") panic(err) } log.Println("DB-OK") dbo = db }
Tony
А как тогда второй раз обращаться? Он же создаст новое подключение к БД?
Tony
Обращение же К БД часто происходит 😕
Abbos
А как тогда второй раз обращаться? Он же создаст новое подключение к БД?
Нет, подключаешься один раз, и через поинтер передаешь куда надо и там используешь
Abbos
db, err := NewDB(connString) db - имеет тип *sql.DB
Tony
func main() { db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/hello") if err != nil { log.Fatal(err) } defer db.Close() } Ну тут-то как раз в переменную db пишется :) А у меня переменная db же вне ф-ции недоступна. Поэтому я спрашиваю куда бы сохранить её для последующих обращений в разных местах программы. В частности сейчас хочу использовать для создания таблиц в пакете миграций
Tony
🤔 вроде начинаю понимать 😊
Anonymous
Соединение к бд делается в cmd/main.go, и уже оттуда передается куда надо
где у тебя работа с базой происходит сделай так: 1) создай структуру type test struct { db *sql.DB } 2) создай функцию func Test(idk *sql.DB) test { return test{db: idk} } 3)работа с базой func (t *test) GetPayments {t.db.Exec}
Anonymous
потом создай инстанс базы и передай в ф-цию Test
Tony
Такой синтаксис я пока не могу переварить 😔
Anonymous
спрашивай что не понятно, а так лучше чекнуть книгу
Tony
//Структура type test struct { db *sql.DB } //Метод структуры func (t *test) GetPayments { t.db.Exec //Это непонятно что такое } //Просто ф-ция func Test(idk *sql.DB) test { return test{db: idk} //Записывает idk типа ссылка на sql.DB в структуру test и возвращает эту структуру } и в разных местах обращаться по test.db ?
Tony
Почему не проще сделать так? var dbo *sql.DB func ConnectSqlite(dbname string) { db, err := sql.Open("sqlite3", "uslugi.db") if err != nil { log.Println("err") panic(err) } err = db.Ping() if err != nil { log.Println("err") panic(err) } log.Println("DB-OK") dbo = db } И потом ч-з пакет.dbo дергать?
Muhammadamin
-
Null
🔥 Полезные модули Go. Generic ОРМ, на базе sqlx Читать @Golang_google
Null
Что выведет код? Ответ: 1 [2,3] @Golang_google
Work
1
нет же
Viacheslav
Что выведет код? Ответ: 1 [2,3] @Golang_google
Думал что 1 ,[2,3,3]. Оказалось не верно.
Vlad
Что выведет код? Ответ: 1 [2,3] @Golang_google
да, точно, массив получается.
Ron Mount
Что выведет код? Ответ: 1 [2,3] @Golang_google
меня из себя если увижу такое говно на проде
Alexey
Что выведет код? Ответ: 1 [2,3] @Golang_google
на десктопе в превью в списке сообщений сразу ответ виден. баг телеги
Tony
Мне больше нравится запросы руками писать в первозданном виде 😋 пока что. Ещё не разобрался, как именные параметры задавать, а так норм.
Олег
Что выведет код? Ответ: 1 [2,3] @Golang_google
0-й элемент первоначального массива lstArray присваивается переменной x а новое значение массива lstArray - это срез первоначального массива lstArray из 1-го и 2-го элементов
Tony
Это похоже на синглтоны)
Вот думаю, что это может быть проблемой при одновременном обращении с никаких потоков
Maks
Это может быть проблемой при написании тестов)
Maks
Тесты хорошо показывают места которые можно сделать лучше и более приспособленными к изменениям
Tony
Пока не представлю 🙈
Ron Mount
jk
Vasya🐾
Сори за глупый вопрос. Как правильно написать обьект с таким уровнем вложенности структуры? https://go.dev/play/p/ETfnPOiB-Mn
Vasya🐾
типа send = Data{......}
leejoys
привет! как сделать go get не из ветки мастер?
leejoys
суть: я создал пакет в отдельной ветке, пакет импортируется в другом файле, при импорте пишет no required module provides package