我正在嘗試制作一個以 mysql rows.Scan 函數需要它的方式轉換結構的函數,所以我不需要手動傳遞大量參數。注意:我知道 sqlx 的存在以及在每個指針的單獨行中手動編寫的替代方法,但我想以這種方式解決它,因為我正在學習并想了解發生了什么。我用這個解決方案得到的錯誤是:panic: sql: Scan error on column index 0: destination not a pointer對我來說看起來valueField.Addr().Pointer()應該是一個指向值的指針。以下是我的代碼的簡化。type User struct { Name string Age int}func StrutForScan(u interface{}) []interface{} { val := reflect.ValueOf(u).Elem() v := make([]interface{}, val.NumField()) for i := 0; i < val.NumField(); i++ { valueField := val.Field(i) v[i] = valueField.Addr().Pointer() } return v}func ListUsers { rows, err := db.Query("SELECT * FROM users") PanicIf(err) var user User for rows.Next() { err := rows.Scan(StrutForScan(&user)...) PanicIf(err) fmt.Printf("\nName: %s, Age: %s", user.Name, string(user.Age)) }}
獲取指向結構字段值的指針
慕的地8271018
2021-09-21 22:47:06
