我下面有这样的代码。
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
块中创建一个新的err
和if
变量,这些变量在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/