是否导出了嵌入式错误?

根据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())

}


一只名叫tom的猫
浏览 119回答 1
1回答

喵喔喔

当您将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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go