是否导出嵌入式错误?

we

根据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())
}
饼干:

error基本上,接口嵌入到结构中时,会向其添加一个名为errortype 的字段error

因为它是嵌入式的,所以您的结构现在也实现了所有方法。这意味着您的结构可以满足该error接口,您可以对其进行调用Error(),也可以直接将其传递给Println它,它将在其中键入assert error并要求Error()https://play.golang.org/p/0VxUUX2l-z

显然,由于字段被命名,error因此不会导出。但是该结构仍然满足该error接口,因为它具有Error()方法。

有趣的结果是,如果不初始化该字段,Println则会恐慌,因为它将尝试调用Error()nil https://play.golang.org/p/XctFgKZI-K

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章