我最近在玩 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~~ 。为什么我没有得到实际类型?如果是这样,是否有解决方法?(并不是说我的用例是一个现实的用例,但好奇是否有任何可能性)
2 回答
当年话下
TA贡献1890条经验 获得超9个赞
Go 编程语言规范
错误
预先声明的类型错误定义为
type error interface { Error() string}它是表示错误条件的常规接口,nil 值表示没有错误。
接口类型
接口类型指定称为其接口的方法集。接口类型的变量可以存储任何类型的值,方法集是接口的任何超集。据说这样的类型实现了接口。接口类型的未初始化变量的值为 nil。
零值
当通过声明或调用 new 为变量分配存储空间时,或者通过复合文字或调用 make 创建新值时,并且没有提供显式初始化,则给出变量或值一个默认值。这种变量或值的每个元素都被设置为其类型的零值:接口为 nil。
一个零值error
类型,一个接口,没有类型。它的值为nil
。
- 2 回答
- 0 关注
- 382 浏览
添加回答
举报
0/150
提交
取消