出于测试目的,我尝试模拟库中的Rows.Scan方法database/sql
。签名看起来像这样:
func (r *Rows) Scan(dest ...interface{}) error
许多如何使用此方法的示例表明,您将一个指向字符串(例如)的指针传递给 Scan 方法,它将通过该指针分配值。
var name stringrows.Scan(&name)
我一直在尝试重新创建类似的东西以实现我自己的理解并最终进行嘲笑,但它不起作用。
func MockScan(args ...interface{}) { var s2 string fmt.Println(args[0]) args[0] = &s2 fmt.Println(args[0]) } func main() { var s1 string fmt.Println(&s1) MockScan(&s1) fmt.Println(&s1) }
结果是:
0xc0000129500xc0000129500xc0000129600xc000012950
我的初始字符串永远不会呈现新值。我知道字符串是不可变的(尽管我对这个概念的真正理解有点动摇),但实际的Rows.Scan
方法不知何故设法改变了字符串。
ITMISS
相关分类