Go 是否导出嵌入错误?
根据,我可以在结构中嵌入类型Go 是否导出嵌入错误?,go,embedding,Go,Embedding,根据,我可以在结构中嵌入类型 错误接口有一个奇怪的情况。它不是大写的,所以我假设它不是作为类型导出的。但它是由语言定义的。如果我有这样一个结构: package foo type Err struct { error } 嵌入的错误是否已导出?Err是否满足error接口 我可以从另一个软件包访问它吗,即,以下内容是否可以 package main import "errors" import "fmt" import "foo" func main() { e := f
错误
接口有一个奇怪的情况。它不是大写的,所以我假设它不是作为类型导出的。但它是由语言定义的。如果我有这样一个结构:
package foo
type Err struct {
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
的字段,类型为error
因为它是嵌入的,所以结构现在也实现了它的所有方法。这意味着您的结构满足error
接口,您可以对其调用error()
,或者直接将其传递给Println
,它将在error
中键入assert并为您调用error()
显然,因为字段名为error
,所以不会导出。但是结构仍然满足error
接口,因为它有error()
方法
有趣的结果是,如果您不初始化字段Println
,它将死机,因为它将尝试调用nil上的Error()