go - 如何声明一个SQL行,如果else声明未声明问题

标签 go

我下面有这样的代码。

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语句之外使用err:=行,因为cuz都有不同数量的参数。

最佳答案

由于变量的范围,您遇到了问题。
在Golang中,:=在范围内创建一个新变量。
rows, err := pnt.ReadConn("testdb").Query(sql, start, end, start, end)
rows块中创建一个新的errif变量,这些变量在if块之外无法访问。

Shorthand declarations in 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)
}

关于go - 如何声明一个SQL行,如果else声明未声明问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58143139/

相关文章:

go - 我在获取 golang.org/x/tools/cmd/goimports 时遇到问题

go - Go 中的接口(interface)实现强制执行

go - 无法将 JSON 解码为结构

go - 我应该如何声明一个具有返回不同接口(interface) slice 的方法的接口(interface)?

go - 从其他包导入的结构未定义

api - Twitter Account Activity API - 如何为事件订阅 webhook?

go - 为什么没有检测到 Go?

Go 中的日期解析

go - Gorm 中的 many2many,真的

go - 从peer删除ChainCode