Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 是否导出嵌入错误?_Go_Embedding - Fatal编程技术网

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