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

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

從 Windows 交叉編譯到 Linux 時出現錯誤?

從 Windows 交叉編譯到 Linux 時出現錯誤?

Go
ibeautiful 2023-06-01 16:29:07
將我的代碼從 Win10 交叉編譯到 Linux 時,以下代碼停止使用 rows.next    executed rows.Next()    rows, err := DB.Query("SELECT * FROM `machines`")    erh.Check(err)    newUsers := make(map[string]User, count)    defer erh.Check(rows.Close())        for rows.Next() {        //tu is temp user        tu := User{}        err := rows.Scan(&tu.Id, &tu.Name, &tu.Apikey, &tu.Ip, &tu.Machine, &tu.State, &tu.DbAvailable)        erh.Check(err)        log.Println(tu)        newUsers[tu.Apikey] = tu    }當我將延遲放在 rows.Next 下時,執行了 rows.next 代碼rows, err := DB.Query("SELECT * FROM `machines`")erh.Check(err)newUsers := make(map[string]User, count)for rows.Next() {    //tu is temp user    tu := User{}    err := rows.Scan(&tu.Id, &tu.Name, &tu.Apikey, &tu.Ip, &tu.Machine, &tu.State, &tu.DbAvailable)    erh.Check(err)    log.Println(tu)    newUsers[tu.Apikey] = tu}defer erh.Check(rows.Close())有人可以確認這是一個錯誤,還是我在這里遺漏了什么?
查看完整描述

1 回答

?
呼如林

TA貢獻1798條經驗 獲得超3個贊

我不確定這在 Linux 上如何工作,它不應該。這一行:

????defer?erh.Check(rows.Close())

rows.Close()?立即執行,保留返回值,然后延遲對 的調用erh.Check。這就是 defer 的工作原理——立即評估參數。從文檔:

每次執行“defer”語句時,調用的函數值和參數都會像往常一樣計算并重新保存,但不會調用實際函數。

如果你想使用這樣的構造,它必須在一個閉包中,比如:

defer?func()?{
????erh.Check(rows.Close())
}()

所以在 的時候沒有要評估的參數defer。


查看完整回答
反對 回復 2023-06-01
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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