猿问

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

我最近在玩 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~~ 。


为什么我没有得到实际类型?


如果是这样,是否有解决方法?(并不是说我的用例是一个现实的用例,但好奇是否有任何可能性)


慕妹3242003
浏览 384回答 2
2回答

当年话下

Go 编程语言规范错误预先声明的类型错误定义为type error interface {   Error() string}它是表示错误条件的常规接口,nil 值表示没有错误。接口类型接口类型指定称为其接口的方法集。接口类型的变量可以存储任何类型的值,方法集是接口的任何超集。据说这样的类型实现了接口。接口类型的未初始化变量的值为 nil。零值当通过声明或调用 new 为变量分配存储空间时,或者通过复合文字或调用 make 创建新值时,并且没有提供显式初始化,则给出变量或值一个默认值。这种变量或值的每个元素都被设置为其类型的零值:接口为 nil。一个零值error类型,一个接口,没有类型。它的值为nil。

慕尼黑8549860

e是一个空指针不,error它本身 - 接口,所以你不会在这里输入。
随时随地看视频慕课网APP

相关分类

Go
我要回答