parseRows这个方法 row.Scan的是scanArgs 为什么要遍历values呢
来源:4-3 编码实战:实现用户登录接口

愫暮灬
2020-02-17
写回答
2回答
-
愫暮灬
提问者
2020-02-18
为什么要为每列赋值一个指针呢 遍历values赋值指针 和直接给一个空借口类型的值有什么不一样的呢
012020-02-18 -
xiaomo
2020-02-18
同学你好,这种写法主要是为了实现在支持可变长参数的Scan函数中,给入参赋值的作用。
先来看看Scan函数的定义(https://www.godoc.org/database/sql#Row.Scan):
func (r *Row) Scan(dest ...interface{}) error
dest就是需要传入的可变长参数,如果入参是*interface{}类型,这样就可以不经过类型转换将数据拷贝赋值到入参中。
所以在实际的使用Scan过程中,我们可以这样使用(示例):
// ... var name string err := rows.Scan(&name) // ... var id int var name string err = rows.Scan(&id, &name) // ... scanArgs := make([]interface{}, len(columns)) // 临时存储每一行数据 for index, _ := range scanArgs { // 为每列元素初始化一个指针 var tmp interface{} scanArgs[index] = &tmp } err := rows.Scan(scanArgs...) // ... scanArgs := make([]interface{}, len(columns)) values := make([]interface{}, len(columns)) for j := range values { scanArgs[j] = &values[j] } err := rows.Scan(scanArgs...)
022020-10-31
相似问题