亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何聲明一個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 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號