gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:17:51 25 4
gpt4 key购买 nike

我下面有这样的代码。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com