Xem https://stackoverflow.com/questions/20271123/go -lang-sql-trong-thông số câu trả lời mà câu trả lời của tôi dựa trên. Sử dụng điều đó, bạn có thể làm điều gì đó như sau:
var myMap = make(map[string]interface{})
rows, err := db.Query("SELECT * FROM myTable")
defer rows.Close()
if err != nil {
log.Fatal(err)
}
colNames, err := rows.Columns()
if err != nil {
log.Fatal(err)
}
cols := make([]interface{}, len(colNames))
colPtrs := make([]interface{}, len(colNames))
for i := 0; i < len(colNames); i++ {
colPtrs[i] = &cols[i]
}
for rows.Next() {
err = rows.Scan(colPtrs...)
if err != nil {
log.Fatal(err)
}
for i, col := range cols {
myMap[colNames[i]] = col
}
// Do something with the map
for key, val := range myMap {
fmt.Println("Key:", key, "Value Type:", reflect.TypeOf(val))
}
}
Khi sử dụng gói phản ánh, bạn có thể nhận được Loại cho mỗi cột khi cần thiết như được minh họa với vòng lặp ở cuối.
Điều này là chung và sẽ hoạt động với bất kỳ bảng nào, số lượng cột, v.v.