使用 Go 检查 sqlite db 中是否存在值

cow*_*cks 2 sql sqlite go

我正在编写代码来使用 Go 管理 sqlite 数据库中的用户。

我正在尝试检查用户名是否被占用,但我的代码很难看。

我的桌子看起来像:

    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT UNIQUE,
    password TEXT
Run Code Online (Sandbox Code Playgroud)

我检查用户名是否被用于:

func UserExists(db * sql.DB, username string) bool {
    sqlStmt := `SELECT username FROM userinfo WHERE username = ?`
    count := 0
    rows, err := db.Query(sqlStmt, username)
    Check(err)
    for rows.Next() {  // Can I just check if rows is non-zero somehow?
        count++
    }
    return len(rows) != 0
}
Run Code Online (Sandbox Code Playgroud)

是否有更好的查询我可以使用它会以更直接的方式告诉我表中是否存在用户名值?或者有没有更好的方法来检查是否rows非零?

cd1*_*cd1 5

用于QueryRow最多查询一行。如果查询不返回任何行,则返回sql.ErrNoRows.

func UserExists(db * sql.DB, username string) bool {
    sqlStmt := `SELECT username FROM userinfo WHERE username = ?`
    err := db.QueryRow(sqlStmt, username).Scan(&username)
    if err != nil {
        if err != sql.ErrNoRows {
            // a real error happened! you should change your function return
            // to "(bool, error)" and return "false, err" here
            log.Print(err)
        }

        return false
    }

    return true
}
Run Code Online (Sandbox Code Playgroud)