Я пытаюсь использовать go sql драйвер для чтения из таблиц базы данных, и я преобразовываю значения в []map[string]interface{}
. Имя столбца - это ключ карты, а значения - interface{}
. Я добавляю все столбцы в массив. В качестве примера я использую образец кода для «RawBytes» по адресу https://github.com/go-sql-driver/mysql/wiki/Examples.Перейти SQL драйвер получить интерфейс {} значения столбца
Однако в примере -вс значение столбца преобразуется в string
следующим образом,
// Fetch rows
for rows.Next() {
// get RawBytes from data
err = rows.Scan(scanArgs...)
if err != nil {
panic(err.Error()) // proper error handling instead of panic in your app
}
// Now do something with the data.
// Here we just print each column as a string.
var value string
for i, col := range values {
// Here we can check if the value is nil (NULL value)
if col == nil {
value = "NULL"
} else {
value = string(col) //ATTN : converted to string here
}
fmt.Println(columns[i], ": ", value)
}
fmt.Println("-----------------------------------")
}
Есть ли способ, чтобы сохранить его как interface{}
, так что я могу сделать необходимый тип отливку, используя столбцы из []map[string]interface{}
Это лучше использовать-структуру, если вы знаете структуру вашей базы данных. –
Вы изучили этот вопрос (http://stackoverflow.com/questions/17840963/create-a-map-in-golang-from-database-rows)? –
@PravinMishra Да, ответ на вопрос (http://stackoverflow.com/questions/17840963/create-a-map-in-golang-from-database-rows) - это то, что я делаю прямо сейчас, но мой интерфейс { } - все строки, потому что я делаю строку (col), которую хочу избежать, поскольку она бросает вызов концепциям типа. Использование struct является допустимой альтернативой, если я не могу ничего сделать, я пойду с альтернативой структуры –