这篇是对 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)
}
现在只要知道,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 包的用法
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.