在python中,它是一个简单的db.query("SELECT id,login,password FROM Users")
和返回列表[(1,'root','password'), (2,'toor','password')]
。我可以简单地迭代它
for user in response:print("id: %s, login: %s, password: %s", %(user[0],user[1],user[2]))
但是在Golang,我找不到一个简单的方法来做这个例子。
我知道python有动态类型,golang是静态的。所以我正在寻找答案,也许有些库提供了这样的功能?黑客?谢谢你的回答!
答案 0 :(得分:1)
你需要这样的东西,但如果你使用复杂的mysql的数据类型,比如enum,set等,可能会出现问题。
var (
result [][]string
container []string
pointers []interface{}
)
rows, err := db.Query("SELECT id, login, password FROM Users")
if err != nil {
panic(err.Error())
}
cols, err := rows.Columns()
if err != nil {
panic(err.Error())
}
length := len(cols)
for rows.Next() {
pointers = make([]interface{}, length)
container = make([]string, length)
for i := range pointers {
pointers[i] = &container[i]
}
err = rows.Scan(pointers...)
if err != nil {
panic(err.Error())
}
result = append(result, container)
}
然后你可以循环结果并使用fmt包打印它。
答案 1 :(得分:0)
一个很棒的扩展go标准lib sql接口的库是sqlx
使用这个lib,您可以在python中执行与您的示例类似的操作:
db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable")
if err != nil {
log.Fatalln(err)
}
users := []User{}
db.Select(&users, "SELECT id,login,password FROM Users")
//iterate through the users slice