如何声明一个SQL行,if else语句未声明问题

我有一个像下面这样的代码。


var sql string


if pnt.Type == "newType" {

    sql = `select code, count(*) count from ( 

                select code 

                    from code_table 

                    where start >= ? and end <= ? 

                union 

                select code 

                    from code_table 

                    where start >= ? and end <= ? 

                ) a group by code`

    rows, err := pnt.readConn("testdb").Query(sql, start, end, start, end)

} else {

    sql = `select code, count(*) count from code_table where start >= ? and end <= ?` group by code

    rows, err := pnt.readConn("testdb").Query(sql, start, end)

}


if err == nil {

    defer rows.Close()

    for rows.Next() {

        var code, count int

        rows.Scan(&code, &count)

    }

} else {

    log.Println(err)

}

这会给我一个类似这样的错误“未为行声明变量,错误”...


我尝试声明“var err error”,并在 if else 语句中,我使用 = 而不是 := 这样的东西


var err error

rows, err = pnt.switchConn("base", "read").Query(sql, start, end)

但是,我仍然无法声明行,因为我会遇到不同类型的错误。我尝试将其声明为字符串,但没有成功。


这是我第一次使用 golang,if else 的事情让我很困难,为什么我不能在 if else 语句中使用 := 。正如您所看到的,我不能在 if else 语句之外使用 rows, err := ,因为两者都有不同数量的参数。


慕标5832272
浏览 107回答 2
2回答

喵喔喔

由于变量的范围,您面临问题。在 Golang 中,:=在作用域内创建一个新变量。rows, err := pnt.ReadConn("testdb").Query(sql, start, end, start, end)在块中创建一个新的rowsanderr变量if,该变量在 if 块之外无法访问。Go 中的简写声明修复,var sql stringvar err errorvar rows *sql.Rowsif pnt.Type == "newType" {    sql = `select code, count(*) count from (                 select code                     from code_table                     where start >= ? and end <= ?                 union                 select code                     from code_table                     where start >= ? and end <= ?                 ) a group by code`    rows, err = pnt.ReadConn("testdb").Query(sql, start, end, start, end)} else {    sql = `select code, count(*) count from code_table where start >= ? and end <= ?` group by code    rows, err = pnt.ReadConn("testdb").Query(sql, start, end)}if err == nil {    defer rows.Close()    for rows.Next() {        var code, count int        rows.Scan(&code, &count)    }} else {    log.Println(err)}

开心每一天1111

在golang中“:=”意味着你声明一个变量并为其分配一个值GO将自动检测他的类型所以:示例&nbsp;variable := 15&nbsp;这是相同的&nbsp;var variable int = 15因此,当您执行此rows, err := pnt.switchConn("base", "read").Query(sql, start, end, start, end) } else { &nbsp; &nbsp;sql =选择代码时, count(*) 从 code_table 中开始计数,其中 start >= ?并结束 <= ?&nbsp;group by code &nbsp; &nbsp;rows, err := pnt.switchConn("base", "read").Query(sql, start, end) }您声明相同的变量行并犯了两次错误
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go