当前位置: > > > > 将数据库行读入映射字符串
将数据库行读入映射字符串
来源:stackoverflow
2024-04-28 15:45:32
0浏览
收藏
今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《将数据库行读入映射字符串》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!
问题内容
我想从一个简单的 sql 表中读取结果,如下所示
| customer | key |
|---|---|
| A | 12345 |
| B | 6789 |
现在,我想构造一个 map[string]string ,它的键值对等于行值,如下所示:
map[a:12345, b:6789]
但是,我在从查询结果中取出值并动态创建键值对时遇到了麻烦。我将提供代码的粗略轮廓(sql 连接不是问题,我已经弄清楚了)
import "database/sql"
func main() {
// some code to connect to mssql...
db, _ := sql.open("mssql", connstring)
stmt := "select customer, key from tbl"
rows, _ := db.query(stmt)
defer rows.close()
data := make(map[string]string)
for rows.next() {
// need help here grabbing each row pair and adding them to my map...
}
}
我也愿意尝试使用空结构来执行此操作,其中字段成为结果集的第一列(动态),值成为结果集的第二列。
正确答案
您可以将值临时存储在两个变量中,然后将它们存储在地图中:
func main() {
stmt := "SELECT customer, key from tbl"
rows, _ := db.Query(stmt)
defer rows.Close()
data := make(map[string]string)
var (
consumer string
key string
)
for rows.Next() {
if err := rows.Scan(&consumer, &key); err != nil {
// Handle err
}
data[consumer] = key
}
for k, v := range data {
fmt.Println(k, v)
}
// "A" "12345"
// "B" "6789"
}
请注意,consumer 和 key 变量是在循环外部分配的,因此我们可以重复使用它们。即使值是空字符串,变量也会在每次迭代时被覆盖。
本篇关于《将数据库行读入映射字符串》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注米云公众号!
