我最近正在玩Go语言,至少可以说有点奇怪,让我们考虑一个非常简单的功能:
func main() {
n, e := fmt.Println(`He said: "Hello"`)
fmt.Printf("%T\n", n)
}
输出我所期望的:
He said: "Hello"
int
现在,如果我想显示e
的类型:
func main() {
n, e := fmt.Println(`He said: "Hello"`)
fmt.Printf("%T\n", e)
}
这一次打印出来:
He said: "Hello"
<nil>
我认为没有错误,所以e
是一个空指针:nil
,但我不希望自己成为~~ type ~~。
为什么我没有得到实际的类型?
如果是,是否有解决方法? (不是说我的用例是一个现实的案例,但是好奇是否有可能)
答案 0 :(得分:5)
The Go Programming Language Specification
预定义的类型错误定义为
type error interface { Error() string }
它是表示错误情况的常规界面, nil值表示没有错误。
接口类型指定一个称为其接口的方法集。一种 接口类型的变量可以使用方法存储任何类型的值 设置为接口的任何超集。据说这种类型 实现接口。未初始化的变量的值 接口类型为nil。
当通过声明为变量分配存储空间时 或调用new或创建新值时(通过 复合文字或make的调用,并且没有显式初始化 如果提供,则变量或值被赋予默认值。每个元素 变量或值的类型为其类型的零值:nil 用于界面。
零值error
类型(接口)没有类型。其值为nil
。
答案 1 :(得分:2)
e
是一个空指针
不是,error
本身-界面,所以您在这里无需输入文字。