请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

defer 在跳出之后也执行不到啊,要defer应该先defer吧

还是没有明白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
}

正在回答 回答被采纳积分+3

1回答

艾文西 2020-08-04 10:18:10

这个问题之前回答过,参看这个问题

https://coding.imooc.com/learn/questiondetail/182346.html

0 回复 有任何疑惑可以回复我~
  • 提问者 weixin_慕虎4362381 #1
    您如果仔细看下我的问题,就会发现我和他问的并不完全一样,我的defer没有放在会报空指针的位置。您的defer的位置的确不对,您可以仔细想一想考虑下。defer函数不注册并不会被执行,放到函数最后是没有意义的
    回复 有任何疑惑可以回复我~ 2020-08-04 23:17:01
  • 艾文西 回复 提问者 weixin_慕虎4362381 #2
    嗯,你的修改是对的,这里应该是疏忽了。多谢指出
    回复 有任何疑惑可以回复我~ 2020-08-18 11:43:18
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信