来看这么一段业务代码:
代码的主要逻辑就是根据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行的:=改成=