为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕标5832272 2023-07-26 17:15:56
我有一个像下面这样的代码。var sql stringif 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 errorrows, err = pnt.switchConn("base", "read").Query(sql, start, end)但是,我仍然无法声明行,因为我会遇到不同类型的错误。我尝试将其声明为字符串,但没有成功。这是我第一次使用 golang,if else 的事情让我很困难,为什么我不能在 if else 语句中使用 := 。正如您所看到的,我不能在 if else 语句之外使用 rows, err := ,因为两者都有不同数量的参数。
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

由于变量的范围,您面临问题。在 Golang 中,:=在作用域内创建一个新变量。

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

在块中创建一个新的rowsanderr变量if,该变量在 if 块之外无法访问。

Go 中的简写声明

修复,

var sql string

var err error

var rows *sql.Rows


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)

}


查看完整回答
反对 回复 2023-07-26
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

在golang中“:=”意味着你声明一个变量并为其分配一个值GO将自动检测他的类型所以:示例 variable := 15 这是相同的 var variable int = 15

因此,当您执行此rows, err := pnt.switchConn("base", "read").Query(sql, start, end, start, end) } else {    sql =选择代码时, count(*) 从 code_table 中开始计数,其中 start >= ?并结束 <= ? group by code    rows, err := pnt.switchConn("base", "read").Query(sql, start, end) }您声明相同的变量行并犯了两次错误


查看完整回答
反对 回复 2023-07-26
  • 2 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信