在Go语言规范中,需要导出到包外的东西必须以大写字母开头,我想知道error接口是如何暴露在包外的,并且可以在任何地方访问,即使它以小写字母开头,不像其他接口以大写字母开头,如Stringer。
error
Stringer
kx7yvsdv1#
error是一个内置类型,就像int,bool,string等。我猜你从来没有想知道为什么int是可用的,尽管开始与小写字母。内置类型是预先声明的标识符,它们在Universe块中隐式声明,因此在任何地方都可用,而无需任何导入或限定符。
int
bool
string
m1m5dgzv2#
error是一种特殊情况,在语言规范中定义:预声明的类型错误定义为
type error interface { Error() string }
它是表示错误条件的常规接口,nil值表示没有错误,例如,可以定义一个从文件中读取数据的函数:
func Read(f *File, b []byte) (n int, err error)
作为历史琐事,在Go语言的预发布版本中,它是标准库包的一部分,但这会导致依赖噩梦,所以他们将其作为一个特例。
2条答案
按热度按时间kx7yvsdv1#
error
是一个内置类型,就像int
,bool
,string
等。我猜你从来没有想知道为什么int
是可用的,尽管开始与小写字母。内置类型是预先声明的标识符,它们在Universe块中隐式声明,因此在任何地方都可用,而无需任何导入或限定符。
m1m5dgzv2#
error
是一种特殊情况,在语言规范中定义:预声明的类型错误定义为
它是表示错误条件的常规接口,nil值表示没有错误,例如,可以定义一个从文件中读取数据的函数:
作为历史琐事,在Go语言的预发布版本中,它是标准库包的一部分,但这会导致依赖噩梦,所以他们将其作为一个特例。