根据Go语言规范,我可以将类型嵌入结构中。
error
接口有一个奇怪的情况。它不是大写的,因此我假设它没有作为类型导出。但是它是由语言定义的。因此,如果我有这样的结构:
package foo
type Err struct {
error
}
嵌入式error
产品出口了吗?是否Err
满足error
界面要求?
我可以从其他软件包访问它吗,即可以吗?
package main
import "errors"
import "fmt"
import "foo"
func main() {
e := foo.Err{}
e.error = errors.New("Hello world!") // is this okay?
fmt.Println(e.Error())
}
error
基本上,将接口嵌入到结构中时,会向其添加一个名为error
type 的字段error
。
因为它是嵌入式的,所以您的结构现在也实现了所有方法。这意味着您的结构可以满足该error
接口,您可以对其进行调用Error()
,也可以直接将其传递给Println
它,它将在其中键入assert error
并要求Error()
您https://play.golang.org/p/0VxUUX2l-z
显然,由于字段被命名,error
因此不会导出。但是该结构仍然满足该error
接口,因为它具有Error()
方法。
有趣的结果是,如果不初始化该字段,Println
则会恐慌,因为它将尝试调用Error()
nil https://play.golang.org/p/XctFgKZI-K
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句