为了账号安全,请及时绑定邮箱和手机立即绑定

是否导出了嵌入式错误?

是否导出了嵌入式错误?

Go
一只名叫tom的猫 2021-12-20 10:16:20
根据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


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信