根据Go 语言规范,我可以在结构中嵌入类型。error接口有一个奇怪的情况。它不是大写的,所以我认为它不是作为类型导出的。但它是由语言定义的。所以如果我有一个这样的结构:package footype Err struct { error}嵌入式是error出口的吗?是否Err满足error接口?我可以从另一个包访问它,即以下可以吗?package mainimport "errors"import "fmt"import "foo"func main() { e := foo.Err{} e.error = errors.New("Hello world!") // is this okay? fmt.Println(e.Error())}
1 回答
喵喔喔
TA贡献1735条经验 获得超5个赞
当您将error接口嵌入到结构中时,基本上,您向其添加了一个以errortype命名的字段error。
因为它嵌入了您的结构现在也实现了它的所有方法。这意味着您的结构满足error接口,您可以调用Error()它或只是将它传递给Println它,它会输入断言error并调用Error()您https://play.golang.org/p/0VxUUX2l-z
显然,因为字段被命名,error所以它不会被导出。但是结构体仍然满足error接口,因为它有Error()方法。
有趣的结果是,如果您不初始化该字段Println将会恐慌,因为它会尝试调用Error()nil https://play.golang.org/p/XctFgKZI-K
- 1 回答
- 0 关注
- 156 浏览
添加回答
举报
0/150
提交
取消
