私はPostgreSQLデータベースを使用する小さなGoプログラムを持っています。その中には行が返されないクエリがあり、これを処理するために使用しているコードが正しく動作していません。sql.ErrNoRowsを使用したデータベース/ sqlの例がクラッシュして焼く
// Get the karma value for nick from the database.
func getKarma(nick string, db *sql.DB) string {
var karma int
err := db.QueryRow("SELECT SUM(delta) FROM karma WHERE nick = $1", nick).Scan(&karma)
var karmaStr string
switch {
case err == sql.ErrNoRows:
karmaStr = fmt.Sprintf("%s has no karma.", nick)
case err != nil:
log.Fatal(err)
default:
karmaStr = fmt.Sprintf("Karma for %s is %d.", nick, karma)
}
return karmaStr
}
このロジックはGo documentationから直接取得されます。ニックに対応する行がない場合は、次のエラーが発生します。
2016/07/24 19:37:07 sql: Scan error on column index 0: converting driver.Value type <nil> ("<nil>") to a int: invalid syntax
私は愚かな何かをやっている必要があります - 手がかりは感謝を。
あなたのスイッチで常に 'err'と比較しているのであれば、代わりに' switch err {} 'を使わないのはなぜですか? –
どの "database/sql"ドキュメントを参照していますか?そのコードは、Postgresのマニュアルではほとんどありません。 –
@a_horse_with_no_name:https://golang.org/pkg/database/sql/#DB.Query、QueryRowの例を展開してください。 –