去包装测试通常提供线索的做事情。例如,从
database/sql/sql_test.go,
func TestQuery(t *testing.T) {
/* . . . */
rows,err := db.Query("SELECT|people|age,name|")
if err != nil {
t.Fatalf("Query: %v",err)
}
type row struct {
age int
name string
}
got := []row{}
for rows.Next() {
var r row
err = rows.Scan(&r.age,&r.name)
if err != nil {
t.Fatalf("Scan: %v",err)
}
got = append(got,r)
}
/* . . . */
}
func TestQueryRow(t *testing.T) {
/* . . . */
var name string
var age int
var birthday time.Time
err := db.QueryRow("SELECT|people|age,name|age=?",3).Scan(&age)
/* . . . */
}
对于您的问题,将一行查询到一个结构中,将会转换为:
var row struct {
age int
name string
}
err = db.QueryRow("SELECT|people|age,3).Scan(&row.age,&row.name)
我知道这与您的解决方案类似,但重要的是要显示如何找到解决方案。