陷阱一 interface问题
问题代码
1 | package main |
输出结果
1 | I am Error 1 of Error occured at (1000,whoami?) |
原因
err 是一个接口,接口在Go中保存了两个值,一个是
类型T
,一个值V
只有当T
和V
同时 为nil
时,接口才是nil
在Go中,接口是隐式实现,因此当我们用一个接口类型去接收一个nil结构体的时候,那么这个接口将不再是nil
此时的err值为(T=*DetaildError, V=nil)
,不满足接口为nil条件
解决办法
修正一:将var err Error 修改为接收Struct 而不是接口
1 | var err *DetaildError |
修正二:将handle方法的返回类型为interface
1 | func handle(x int) error { |
参考:
- mp.weixin.qq.com/s/0bJOzNxoQhdVjFOunhmVKQ