我想返回給定的一個屬性,可以是user_id,電子郵件或名稱的所有用戶信息。golang返回第一個字段從結構
u := User{
Email: "[email protected]"
})
k := User {
Name: "john"
}
ReturnUserInfo(u)
ReturnUserInfo(k)
我調用了只傳遞一個字段的User結構的函數。然後我想解析這個字段,而不用明文地說電子郵件。最後,我通過傳遞一個隱含的字段(USER_ID或電子郵件等)
func ReturnUserInfo(u User) (y User){
// Retrieve first field from u and set them to field and value.
// NOT explicitly stating field := email, value := u.Email
db, _ := sql.Open("mysql", "root:[email protected]/users")
_ := db.QueryRow("SELECT user_id, name, email FROM users WHERE ? = ?", field, value).Scan(
&u.User_id, &u.Name, &u.Email)
y = User{
User_id: u.User_id,
Name: u.Name,
Email: u.Email,
}
return y
}
我不知道如果我能做到這一點在Golang獲得用戶信息,但我創建這個功能,所以我做的不必明確告訴Go去尋找一個特定的屬性來返回用戶的信息。
由於只有兩個選項,因此按名稱明確指出字段有什麼問題?這是一個簡單的if-else語句來寫出你的where子句。如果你的真實用例有很多字段,而不僅僅是一對夫婦,那麼我可以理解想要使用反射,但它是編寫查詢的不可預知的方式。就像你可以談論所有的領域,並使用數組中的第一個值來設置你的位置,但是當具有值的第一項是一些隨機無意義的非識別列時會發生什麼? – evanmcdonnal
我想寫這樣的函數並不實際,特別是現在我想到了驗證。我會用你建議的if-else結構。 – goda