关于类型断言的一些疑问

来源:8-5 服务器统一出错处理2

五栋一哥

2020-03-02

老师,您好!对于类型断言我有些疑问
1.类型断言err.(userErr),会调用Error()方法吗?为什么?
2.err.(userErr)返回值的value是什么?
3.网上有人说:“在fmt.Println的实现里面会做类型断言,看是否实现error接口和string接口,且error优先级会高于string”,请问这句话是否为正确的呢?
谢谢老师!

写回答

1回答

ccmouse

2020-03-02

  1. 不会,类型断言只是看一下它是不是你要的类型,不会调用Error()

  2. err.(userErr),如果这个err是userErr,那么它返回它本身,不过类型变成了是userErr。不是的话会panic

  3. 是的,我们可以简单的实现Error()和String()两个函数试一下。具体代码在 https://github.com/golang/go/blob/master/src/fmt/print.go#L615 

2
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程