根据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
接口嵌入到结构中时,基本上,您向其添加了一个以error
type命名的字段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 关注
- 117 浏览
添加回答
举报
0/150
提交
取消