Tony
2022/04/26 18:50:40 DB-OK
Tony
По идее должно было напечатать: log.Println("err")
Tony
Или механизм какой-то более сложный?
Denis
подскажите как в slice проверить содержится ли конкретное значение? По аналогии оператора In в других языках?
Herman
Циклом
Ron Mount
Ron Mount
Педалируй велосипедик дружок
Denis
классный язык) мне нравится......
Alexander
Ошибка nil
Потому что если файла нет, оно создаёт. Попробуй права на папку или на файл сделать такие, что запускающий юзер не может открыть и писать
Alexander
Или диск до краёв заполни
Alexander
Ручками файлик проверяй есть или нет
Alexander
Но вообще да, пингануть не мешает. Но тут логика подсказывает, что это всё равно не поможет, и тупо создастся файл. А может ошибаюсь, конечно
🅞leksiy
🅞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 не прошел
Alexey
ставь пг и не парься)
Alexander
Tony
Tony
Alexander
что значит бронировать? что значит локальный? 127.*.*.*?
Alexander
Alexander
ты хочешь через много сокетов машины открывающей соединения заменить на 1?
Alexander
ну так просто спрошу, лимит не пробовал расширять? может быть достаточно
Alexander
ну и вопрос? реально ли нужно держать эти соединения?
Alexander
лул)
Tony
𝙲𝚊𝚝𝚒𝚘𝚗
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
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 же вне ф-ции недоступна. Поэтому я спрашиваю куда бы сохранить её для последующих обращений в разных местах программы. В частности сейчас хочу использовать для создания таблиц в пакете миграций
Abbos
Tony
🤔 вроде начинаю понимать 😊
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
Vlad
Vlad
Work
Viacheslav
Vlad
Work
Vlad
Ron Mount
Tony
Мне больше нравится запросы руками писать в первозданном виде 😋 пока что. Ещё не разобрался, как именные параметры задавать, а так норм.
Олег
Maks
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