TL; DR
Чтобы выбрать значения одного столбца в срез, используя Gorm, вы можете использовать db.Pluck
helper:
var tables []string
if err := db.Table("information_schema.tables").Where("table_schema = ?", "public").Pluck("table_name", &tables).Error; err != nil {
panic(err)
}
TS; WM
С учетом этого оператор SELECT возвращает набор строк с одним или несколькими столбцами. Чтобы отобразить их в Go коде, нам нужна некая структура, чтобы Горм мог понять, какой столбец сопоставлен с каким полем структуры. Даже если вы выбираете только один столбец, это просто структура с одним полем.
type Table struct {
TableName string
// more fields if needed...
}
Таким образом, ваша выходная переменная должна быть []*Table
:
var tables []*Table
if err := db.Table("information_schema.tables").Select("table_name").Where("table_schema = ?", "public").Find(&tables).Error; err != nil {
panic(err)
}
Примечание: это может быть также []Table
, если вы не хотите изменять элемент внутри среза.
Если вы не хотите определять структуру, вы можете использовать функцию db.Pluck
, которая является просто помощник такого рода кода:
rows, err := db.Table("information_schema.tables").Select("table_name").Where("table_schema = ?", "public").Rows()
defer rows.Close()
var tables []string
var name string
for rows.Next() {
row.Scan(&name)
tables = append(tables, name)
}