2 回答

TA貢獻1906條經(jīng)驗 獲得超3個贊
檢查你的錯誤,不要忽略它們。例如...
update, _ := db.Prepare("SELECT salary FROM users WHERE id = (?)")
從返回的第二個值db.Prepare
是 an error
,它將解釋出了什么問題,但您忽略了它。如果prepare
失敗,update
將被破壞。當您嘗試使用它時,update.QueryRow(id).Scan(&salary)
或者defer update.Close()
您會感到恐慌。
檢查錯誤并處理它。在這種情況下,打印并返回。
update, err := db.Prepare("SELECT salary FROM users WHERE id = (?)")
if err != nil {
fmt.Println("db.Prepare failed:", err)
return
}
// This has to come afterwards else you'll try to close nil.
defer update.Close()
對所有可能返回錯誤的東西執(zhí)行此操作。這意味著db.Prepare
、sql.Open
和Row.Scan
。
另請參閱Golang 中的錯誤和異常處理。
注意:MySQL 一次有最大準備語句數(shù)。如果將其設(shè)置得較低,例如 1024,則可能是問題所在。但是錯誤應該告訴你。
注意:一遍又一遍地準備、執(zhí)行和關(guān)閉相同的語句會破壞準備語句的意義。在真實的應用程序中,您只需準備一次語句并將其傳遞給每個 Goroutine。您只會在所有 Goroutine 完成后關(guān)閉該語句。
- 2 回答
- 0 關(guān)注
- 131 瀏覽
添加回答
舉報