これはなぜですか?ここに私のコードだ:2つの文字列は同じポインタアドレスを持っています
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