背景
这个问题的产生来源于小泉在开发rpc接口时返回error
遇到的问题,开发时想在defer
里对err
进行最终的统一处理赋值,发现外层接收一直都未生效。问题可以简化为成下面的小demo。
func returnError() error {
var err error
defer func() {
//err = errors.New("defer error")
err = nil
}()
err = errors.New("test error")
return err
}
func main() {
fmt.Printf("return error : %v\n", returnError())
}
这个函数会输出什么呢?大家可以自己试一试。
在问题实验之前,我们先介绍一下本文可能会涉及到的一些Go的基本概念。
文章涉及代码部分已放置github。
github地址:go-demo
指针receiver
interface
可以理解为方法的集合体,它是某一类对象的行为表现和Java中的interface
如出一辙,而实现该interface
内所有方法的对象(结构体)都可以作为该interface
类型,即实现该interface
。以如下Box
接口以及BigBox
结构体为例来作为该节内容说明。
type Box interface {