我正在嘗試做一些事情來動態地帶來 SQL 結果結構,基本上我想通過傳遞行和結構來運行一個函數(以獲取數據類型并制作一個)并在接口數組中返回。有誰知道我該怎么做?我不想將直接的“用戶”結構作為參數傳遞..這不是動態的type User struct{ Id_user int `json:"id_user"` Name string `json:"name"` Email string `json:"email"` Username string `json: "username"`}func main() { var user User rows, _ := db.Query("SELECT id_user, name, email, username FROM users") json.NewEncoder(w).Encode(StructRow(user, rows)) }func StructRow(u interface{}, rows *sql.Rows)[]interface{}{ var data []interface{} for rows.Next() { //How i can create a "user" here, dynamically //for Example //var user reflect.TypeOf(u) _ = rows.Scan(StrutForScan(&user)...) data = append(data, user) } return data}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().Interface() } return v}
1 回答

開心每一天1111
TA貢獻1836條經驗 獲得超13個贊
將您的功能更改StructRow為
func StructRow(u interface{}, rows *sql.Rows) []interface{} {
var data []interface{}
for rows.Next() {
t := reflect.TypeOf(u)
val := reflect.New(t).Interface()
errScan := rows.Scan(StrutForScan(val)...)
if errScan != nil {
//proper err handling
}
data = append(data, val)
}
return data
}
會修復它。我猜。有關反射包的更多信息,請訪問:https ://golang.org/pkg/reflect/
- 1 回答
- 0 關注
- 145 瀏覽
添加回答
舉報
0/150
提交
取消