2 回答

TA貢獻1851條經(jīng)驗 獲得超3個贊
panic()退出程序。在你的例子中return false永遠不會達到。在這種情況下,您可以log.Println(err)然后return false。但老實說,在像這樣的 go 函數(shù)中,返回 bool 和 and 錯誤是很好的做法。連接失敗、sql 錯誤、est 等錯誤可能會從數(shù)據(jù)庫返回并需要處理。
func confirmUser(userID string, session string) (error, bool) {
sqlStatement := `SELECT u.id FROM users u INNER JOIN user_sessions s ON u.id = s.userid WHERE u.id = $1 AND s.session = $2`
id := 0
err := db.QueryRow(sqlStatement, userID, session).Scan(&id)
if err != nil {
// if no rows there is no session
if err == sql.ErrNoRows {
return nil, false
}
// an error other than no rows was returned, return with error
return err, false
}
fmt.Println("Found:", id)
return nil, true
}
在你的函數(shù)上,confirmUser像這樣調(diào)用你的函數(shù)
err, valid := confirmUser("myuserid", "sessionstring")
if err != nil {
return err.Error()
}
if !valid (
return "user not valid"
}
// user is valid go on
- 2 回答
- 0 關(guān)注
- 167 瀏覽
添加回答
舉報