Go 系列教程 —— 31. 自定义错误

Noluye ·
lengthNegative和widthNegative是小写的,在包外面就调用不到了。类似的函数,还是写成大写的好。
#3
更多评论
func cicleArea(radius float64) (float64, error) { 为什么error是小写的,但是在其他包能够调用到? 还是说接口没有这个限制? --- fmt.Println(err) 这个方法怎么知道默认取调用下面函数的? func (e \*errorString) Error() string { return e.s } 而且 (e \*errorString) 这个地方为什么要用一个指针?
#1
@baoguoding</a> 小写的error是在 `builtin.go` 中定义的接口,就和float64一样,可以直接使用的。 builtin.go文件中对error接口的声明如下: ```go // The error built-in interface type is the conventional interface for // representing an error condition, with the nil value representing no error. type error interface { Error() string } ``` fmt.Println(err) 这个方法怎么知道默认取调用下面函数的? ==> fmt.Println()函数接收任意的接口类型的参数,error是接口类型,所以能够被传入。在Println的内部,会根据传入的值的类型进行处理,对于error类型的值,go会调用 `print.go` 中的 `handleMethods` 方法进行处理(在第624行调用了error接口的的Error方法),所以你直接传入err的话会调用Error方法进行输出。 func (e *errorString) Error() string { return e.s } 这个地方使用指针的原因是errorString结构体的Error方法使用的是的指针接收器的方式。
#2