Size: a a a

2020 May 27

МП

Мимо Проходящий... in Go-go!
Вячеслав yaches
Имею вопрос насчет работы с sqlx.

В базе две таблицы: foo (поля id, abc) и bar (поля id, foo_id)
Аналогично в коде описаны две структуры:
type Foo struct {
 ID  int `db:"id"`
 Abc int `db:"abc"`
}
type Bar struct {
 ID    int `db:"id"`
 FooID int `db:"foo_id"`
}

И я хочу одним запросом получить список Foo и соответствующих им Bar (если таковые есть), чтобы получить что-то такое:
type FooWithBar struct {
 Foo Foo
 Bar *Bar
}
var result []FooWithBar
Выполнив запрос наподобие этого:
SELECT * FROM foo LEFT JOIN bar ON foo.id = bar.foo_id

Вопрос:
Есть ли способ размаршалить результат последнего SQL запроса, который вернет строки, содержащие все поля обеих таблиц, в структуру наподобие FooWithBar, чтобы поля из разных таблиц оказались в разных полях структуры?
способ есть но вы его не захотите применить, поскольку он лоулевельный. Лучше встроить типы и не мучаться.
И кстати нужно db:"foo.id" и db:"bar.id"
источник

Вy

Вячеслав yaches... in Go-go!
Мимо Проходящий
способ есть но вы его не захотите применить, поскольку он лоулевельный. Лучше встроить типы и не мучаться.
И кстати нужно db:"foo.id" и db:"bar.id"
Теги через точку - спасибо, попробую. А что за лоулевел способ?
источник

ЛА

Локоть Анатолий... in Go-go!
Вячеслав yaches
Работает, но с оговорками:
1) будут поля с одинаковыми названиями и тегами db:"id", одно из них не заполнится
2) в случае с left join - not null поля из правой таблицы могут стать null, и это вызовет ошибку маршалинга
Можно одноименные поля селектить as something, причем в разные значения. А в теге db: прописать соответствующие выбранные имена.
Вообще sql с селектом одноименных полей в любом языке создаст проблему. Лучше бы развести именование полей сразу
источник

Вy

Вячеслав yaches... in Go-go!
С именованием понял, а как быть с left join и null?
источник

МП

Мимо Проходящий... in Go-go!
Вячеслав yaches
Теги через точку - спасибо, попробую. А что за лоулевел способ?
реализовать для типа интерфейсы  Scan(val interface{}) error и  Value() (driver.Value, error)
источник

ЛА

Локоть Анатолий... in Go-go!
Вячеслав yaches
С именованием понял, а как быть с left join и null?
Тут все просто, nullable поля должны быть указателями или sql.NullSomething
источник

МП

Мимо Проходящий... in Go-go!
Вячеслав yaches
С именованием понял, а как быть с left join и null?
type FooWithBar struct {
 FooID  int `db:"foo.id"`
 Abc int `db:"abc"`
BarID    *int `db:"bar.id"`
 BarFooID *int `db:"foo_id"`
}
источник

МП

Мимо Проходящий... in Go-go!
sql.NullSomething - это костыль, не надо так делать. Ни каких бонусов в сравнении с обычным указателем он не даёт
источник

МП

Мимо Проходящий... in Go-go!
Кто знает годный гуй для просмотра логов чтобы без ELC ?
источник

E

Evgeniy_S in Go-go!
Grafana
источник

E

Evgeniy_S in Go-go!
Loki
источник

E

Evgeniy_S in Go-go!
источник

ЛА

Локоть Анатолий... in Go-go!
Мимо Проходящий
Кто знает годный гуй для просмотра логов чтобы без ELC ?
Elc это чего такое?
Знаю, что elk это elastic search, logstash, kibana (и последнее это как раз интерфейс)
источник

VM

Vladislav Milenin in Go-go!
Мимо Проходящий
Кто знает годный гуй для просмотра логов чтобы без ELC ?
таких нет
источник

VM

Vladislav Milenin in Go-go!
не любите elk - придется полюбить grep
источник

BT

Bohdan Turchyk in Go-go!
юзал уже?
источник

RS

Roman Sharkov in Go-go!
Мимо Проходящий
Кто знает годный гуй для просмотра логов чтобы без ELC ?
Kibana
источник

E

Evgeniy_S in Go-go!
Bohdan Turchyk
юзал уже?
да
источник

RS

Roman Sharkov in Go-go!
Evgeniy_S
Grafana
графана скорее для метрик, AFAIK, не? 😀
источник

AS

Andrei 🦉 Sergeev in Go-go!
Bohdan Turchyk
юзал уже?
нужно понимать, что в локи полнотекстового поиска нет
только по заранее заданным лейблам, типа как в прометеусе
источник