引
这篇是对 errors 包 的姿势挖掘
气功波错误代码
从 http.Get()返回的错误 判断 syscall.ECONNREFUSED 错误.以前要对 go 标准库 error 结构有点熟悉,才能写出下面的代码
func CmdErr(err error) {
if err == nil {
return
}
if uerr, ok := err.(*url.Error); ok {
if noerr, ok := uerr.Err.(*net.OpError); ok {
if scerr, ok := noerr.Err.(*os.SyscallError); ok {
if scerr.Err == syscall.ECONNREFUSED {
fmt.Printf("gurl: (7) couldn't connect to host\n")
return
}
}
}
}
fmt.Printf("%s\n", err)
}
用 go1.13 errors 库重构气功波代码
现在只要知道,syscall.ECONNREFUSED 就行。先用 Unwrap 不停的解包 error。最后可能得到需要的 err
func newCmdErr(err error) {
for {
err = errors.Unwrap(err)
if err == nil {
break
}
if err == syscall.ECONNREFUSED {
fmt.Printf("gurl: (7) couldn't connect to host\n")
return
}
}
}
交流学习
一起挖掘 errors 包的用法