Warum ist das so? Hier ist mein Code:Zwei Zeichenfolgen haben die gleiche Zeigeradresse
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)
}
Er druckt
Username
Password
[0xc4201ca2c0 0xc4201ca2c0]
$2a$10$F6hR0scvtbFDx0l1GR.OX.ZweozUzwKVTG3H8GBQxpYCEdFifDrzy
$2a$10$F6hR0scvtbFDx0l1GR.OX.ZweozUzwKVTG3H8GBQxpYCEdFifDrzy
Wie Sie sehen können, keys
die gleiche Adresse auf zwei verschiedene Strings enthält. Infolgedessen sind ihre Werte gleich.
Mein Ziel ist es, username
und password
zu UserLogin
struct.
So einfach das ist, wie es funktioniert und es gibt keine Abhilfe? 'val' funktioniert nur nicht mit' Scan() ', es benötigt' Zeiger'. – adredx
Ich denke, Sie müssen das Schlüssel-Array nicht initialisieren. Pass einfach so auf, wie es ist, nachdem du sie deklariert hast. – sdkie