golang mysql Scan操作按顺序取值问题

rows, err := db.Query("SELECT * FROM user")
checkErr(err)
 
for rows.Next() {
    var userId int
    var userName string
    var userAge int
    var userSex int
    rows.Columns()
    err = rows.Scan(&userId, &userName, &userAge, &userSex)
    checkErr(err)
    fmt.Println(userId)
    fmt.Println(userName)
    fmt.Println(userAge)
    fmt.Println(userSex)
}

如果这时候操作数据在userName前面新增一个字段
这段代码岂不是就废了
在项目中会这样写吗?

阅读 13k
5 个回答

所以你最好不要 select * 而是指定字段,如果嫌烦,可以用 https://github.com/jmoiron/sqlx 这个项目,至少使用起来和原生差不多,而不强制你ORM

SELECT * 这样做的习惯可不好,一般都是指定字段,这样在scan的时候也相对容易把握变量顺序和个数。

实际代码中不会这么写的。
两个方式

  1. 是用Slice来存储。这样,增减字段都不会提取数据的代码。如果想更智能一点,把字段提取出来,然后按顺序生成一个Map的slice。
  2. 简单一点的方法就是用ORM喽。

题主的这个代码,只是Go的基本代码。但是工作环境,肯定是要自行封装或用更方便的包的。

新手上路,请多包涵
    var user User
    for rows.Next() {
        rows.Scan(&user.Id, &user.Name, &user.Age)
        users = append(users, user)
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题