与えられた例の後に、複数の結果セットを含むクエリを構築しています(here)。便宜のため、以下の重要なビットをコピーします。rows.NextResultSet()を使用して複数の結果セットクエリでrows.Err()を呼び出す
私の質問は、それぞれfor rows.Next() {...}
ループの後に、例のように一番最後に1回ではなく、rows.Err()
と呼びますか?なぜ/なぜですか?私の理解は、rows.Err()
が"... encountered during iteration"のエラーをキャッチしますが、rows.NextResultSet()
はキャッチするでしょう、"... [errors] advancing to [the next result set]"です。各反復中にエラーをキャッチしたいと思うようですね。ありがとう!
rows, err := db.Query(q, age)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var (
id int64
name string
)
if err := rows.Scan(&id, &name); err != nil {
log.Fatal(err)
}
fmt.Printf("id %d name is %s\n", id, name)
}
if !rows.NextResultSet() {
log.Fatal("expected more result sets", rows.Err())
}
var roleMap = map[int64]string{
1: "user",
2: "admin",
3: "gopher",
}
for rows.Next() {
var (
id int64
role int64
)
if err := rows.Scan(&id, &role); err != nil {
log.Fatal(err)
}
fmt.Printf("id %d has role %s\n", id, roleMap[role])
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}