去包装测试通常提供线索的做事情。例如,从

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)

我知道这与您的解决方案类似,但重要的是要显示如何找到解决方案。