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

0
2
艾文西
回复
weixin_慕虎4362381
嗯,你的修改是对的,这里应该是疏忽了。多谢指出
2020-08-18
共2条回复

Go语言实战流媒体视频网站,高效学习Go高性能开发

从零开始,全面掌握Go语言编码的架构风格和开发Web的关键技能

996 学习 · 268 问题

查看课程