使用反射把sql.Rows 中值填充到struct 中,從網上找了很多也沒有有效的優雅的方法,參考了gorm后,終於找到了,還是對指針了解不夠
package main import ( "database/sql" "fmt" "reflect" _ "github.com/go-sql-driver/mysql" ) var db *sql.DB type Test struct { UserId int UserName string } func main() { db, _ = sql.Open("mysql", "uname:passwd@tcp(ip:port)/dbname?charset=utf8") rows, err := db.Query("select user_id UserId,user_name UserName from test") defer rows.Close() if err != nil { fmt.Println("sql open error ", err) } t := Test{} columns, _ := rows.Columns() values := make([]interface{}, len(columns)) reflectStruct := reflect.ValueOf(&t).Elem() for i, v := range columns { values[i] = reflectStruct.FieldByName(v).Addr().Interface() } for rows.Next() { rows.Scan(values...) } fmt.Println(t) }