golang mysql查询返回不定字段实现如下:
首先通过func (rs *Rows) Columns() ([]string, error)获取查询字段的slice,然后构造slice,将每次scan出来的值放进去,最后返回查询结果的map slice。
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
conn, err := sql.Open("mysql", "root:psw@tcp(localhost:3306)/test?charset=utf8")
if err != nil {
fmt.Println("mysql connect error")
return
}
defer conn.Close()
rows, err := conn.Query("select * from user")
if err != nil {
fmt.Println("mysql query error", err.Error())
}
defer rows.Close()
columns, err := rows.Columns()
values := make([]sql.RawBytes, len(columns))
scans := make([]interface{}, len(columns))
for i := range values {
scans[i] = &values[i]
}
var result []map[string]string
for rows.Next() {
_ = rows.Scan(scans...)
each := make(map[string]string)
for i, col := range values {
each[columns[i]] = string(col)
}
result = append(result, each)
}
fmt.Println(result)
}
同理查询单条也可以这样操作:
func main() {
conn, err := sql.Open("mysql", "root:psw@tcp(localhost:3306)/test?charset=utf8")
if err != nil {
fmt.Println("mysql connect error", err.Error())
return
}
defer conn.Close()
columns := []string{"id", "name"}
id := 1
sql := fmt.Sprintf("select %s from user where id=%d", strings.Join(columns, ", "), id)
row := conn.QueryRow(sql)
values := make([][]byte, len(columns))
scans := make([]interface{}, len(columns))
for i := range values {
scans[i] = &values[i]
}
if err := row.Scan(scans...); err != nil {
fmt.Println("scan error", err.Error())
return
}
var result = make(map[string]string)
for key, val := range values {
result[columns[key]] = string(val)
}
fmt.Println(result)
}
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔