2 回答

TA贡献1906条经验 获得超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()
对所有可能返回错误的东西执行此操作。这意味着db.Prepare
、sql.Open
和Row.Scan
。
另请参阅Golang 中的错误和异常处理。
注意:MySQL 一次有最大准备语句数。如果将其设置得较低,例如 1024,则可能是问题所在。但是错误应该告诉你。
注意:一遍又一遍地准备、执行和关闭相同的语句会破坏准备语句的意义。在真实的应用程序中,您只需准备一次语句并将其传递给每个 Goroutine。您只会在所有 Goroutine 完成后关闭该语句。
- 2 回答
- 0 关注
- 134 浏览
添加回答
举报