返回值列表已定义了返回变量则if中别用:=再声明这个变量

来看这么一段业务代码:

返回值列表已定义了返回变量则if中别用:=再声明这个变量_第1张图片

 

 代码的主要逻辑就是根据id值在数据库查找社区community,关键在26行,我本意是如果db.Get从数据库没有拿到了community并且是sql.ErrNoRows错误,那么err自然就是ErrorInvalidID,自然也就不为nil,由于我们在返回值列表中声明了err,那么返回的err也就是nil,那么上一层调用了这个函数发现了err不为空自然会给出对应的错误逻辑,但是上一层并没有那么做,也就是说我们返回的err并不是nil!

细心的你一定发现了26行的err是绿的,没错!错误就在26行!

由于我们已经在返回值列表声明了err,而26行 err := 这样相当于又声明了一个err临时变量,因此这两个err就不是一个err了!!!

所以正确的做法是将26行的:=改成=

 

 

你可能感兴趣的:(Golang,golang)