這是爲什麼呢?這裏是我的代碼:兩個字符串具有相同的指針地址
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