defer 在跳出之后也执行不到啊,要defer应该先defer吧
来源:3-11 api之数据库层实现_User部分代码优化
weixin_慕虎4362381
2020-08-02
还是没有明白defer这里有什么用,为什么原来不用defer现在就需要
func AddUserCredential(loginName string, pwd string) error {
stmtIns, err := dbConn.Prepare("INSERT INTO users (login_name, pwd) VALUES (?, ?)")
if err != nil {
return err
}
_, err = stmtIns.Exec(loginName, pwd)
if err != nil {
return err
}
defer stmtIns.Close()
return nil
}
原来应该是不用defer的,因为出错了stmtins 就没有出现就直接返回了,如果成功prepare了就需要close
新加了后面的错误处理之后,应该是在验证之前defer吧,如下,否则返回了也没来得及defer啊
func AddUserCredential(loginName string, pwd string) error {
stmtIns, err := dbConn.Prepare("INSERT INTO users (login_name, pwd) VALUES (?, ?)")
if err != nil {
return err
}
_, err = stmtIns.Exec(loginName, pwd)
defer stmtIns.Close()
if err != nil {
return err
}
return nil
}
写回答
1回答
-
艾文西
2020-08-04
这个问题之前回答过,参看这个问题
https://coding.imooc.com/learn/questiondetail/182346.html
022020-08-18
相似问题