这是为什么呢?这里是我的代码:两个字符串具有相同的指针地址
import (
"database/sql"
"fmt"
"reflect"
"github.com/fatih/structs"
)
type UserLogin struct {
Username string
Password string
}
func Login() {
row := sql.QueryRow("SELECT username, password FROM users WHERE username=?", "golang")
userLoginKeys := structs.Names(UserLogin{})
keys := make([]interface{}, len(userLoginKeys), len(userLoginKeys))
for i, val := range userLoginKeys {
keys[i] = &val
fmt.Println(val)
}
fmt.Println(keys)
_ := row.Scan(keys...)
v1 := reflect.ValueOf(keys[0]).Elem().String()
v2 := reflect.ValueOf(keys[1]).Elem().String()
fmt.Println(v1)
fmt.Println(v2)
}
它打印
Username
Password
[0xc4201ca2c0 0xc4201ca2c0]
$2a$10$F6hR0scvtbFDx0l1GR.OX.ZweozUzwKVTG3H8GBQxpYCEdFifDrzy
$2a$10$F6hR0scvtbFDx0l1GR.OX.ZweozUzwKVTG3H8GBQxpYCEdFifDrzy
正如你所看到的,keys
包含相同的地址到两个不同的字符串。因此,它们的值是相同的。
我的目标是将username
和password
映射到UserLogin
结构。
所以这只是它是如何工作的,有没有解决办法? 'val'只对'Scan()'不起作用,它需要'指针'。 – adredx
我想你不需要初始化数组。只要在声明它们之后按原样传递它即可。 – sdkie