为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 `fmt.Println("%T\n", e)` 其中 `e` 是一个错误变量打印出

为什么 `fmt.Println("%T\n", e)` 其中 `e` 是一个错误变量打印出

Go
慕妹3242003 2023-06-05 13:30:40
我最近在玩 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


查看完整回答
反对 回复 2023-06-05
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

e是一个空指针

不,error它本身 - 接口,所以你不会在这里输入。


查看完整回答
反对 回复 2023-06-05
  • 2 回答
  • 0 关注
  • 382 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信