登录
首页 >  Golang >  Go问答

为何在 Go 中,对错误变量进行 `fmt.Println("%T\n", e)` 输出为 而非其类型?

来源:stackoverflow

时间:2024-03-08 08:12:26 258浏览 收藏

今天golang学习网给大家带来了《为何在 Go 中,对错误变量进行 `fmt.Println("%T\n", 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"

我得到的部分是没有错误,所以 e 是一个空指针:nil 但我没想到它自己会成为一个 ~~type~~ 。

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

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


解决方案


The Go Programming Language Specification

Errors

预声明的类型错误定义为

type error interface {
  Error() string
}

它是表示错误情况的常规接口, nil 值表示没有错误。

Interface types

接口类型指定称为其接口的方法集。 a 接口类型的变量可以通过方法存储任何类型的值 集合是接口的任何超集。据说这样的类型 实现接口。未初始化变量的值 接口类型为nil。

The zero value

当通过声明为变量分配存储空间时 或 new 的调用,或当创建新值时,通过 复合文字或 make 调用,并且没有显式初始化 假设变量或值被赋予默认值。每个元素 此类变量或值的值被设置为其类型的零值: nil 用于接口。

零值 error 类型是一个接口,没有类型。其值为 nil

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

本篇关于《为何在 Go 中,对错误变量进行 `fmt.Println("%T\n", e)` 输出为 而非其类型?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>