我下面有这样的代码。
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.switchConn("base", "read").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.switchConn("base", "read").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)
}
这将给我一个类似这样的错误:“未为行声明变量,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.switchConn("base", "read").Query(sql, start, end, start, end)
在rows
块中创建一个新的err
和if
变量,如果在if块之外则无法访问。
修复,
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.switchConn("base", "read").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.switchConn("base", "read").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)
}
在golang中“:=”表示您声明了一个变量并为其分配了此值,GO将自动检测其类型,因此:Exemplesvariable := 15
一样的var variable int = 15
因此,当您执行此rows, err := pnt.switchConn("base", "read").Query(sql, start, end, start, end)
} else {
sql =
选择代码时,从code_table的count(*)开始> =?并结束<=?group by code
rows, err := pnt.switchConn("base", "read").Query(sql, start, end)
}
您声明相同的变量行,并两次犯错