2 回答
TA贡献1851条经验 获得超3个赞
panic()退出程序。在你的例子中return false永远不会达到。在这种情况下,您可以log.Println(err)然后return false。但老实说,在像这样的 go 函数中,返回 bool 和 and 错误是很好的做法。连接失败、sql 错误、est 等错误可能会从数据库返回并需要处理。
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
}
在你的函数上,confirmUser像这样调用你的函数
err, valid := confirmUser("myuserid", "sessionstring")
if err != nil {
return err.Error()
}
if !valid (
return "user not valid"
}
// user is valid go on
- 2 回答
- 0 关注
- 135 浏览
添加回答
举报