golang 的 if err != nil{}

2017-04-01 18:02:24 +08:00
 specita

最近接触 golang ,对于 err 的设定运用不好,很多工具的函数返回值都是比如(string,error)这类的,或者直接将 error 和值封装成一个 struct 返回,这样导致代码出现了大量的

if err != nil{
	//statement
}

一段代码,感觉一半都是 if err...关键你每调用一次都要 if 一下,没法统一 try catch 真的好忧伤...

3242 次点击
所在节点    Go 编程语言
14 条回复
nicevar
2017-04-01 18:12:44 +08:00
这个设计是有点问题,定义了变量就要用,你忽略吧程序就到这了,很烦
nicevar
2017-04-01 18:13:42 +08:00
用 go 时间不是太长,不知道作者是基于什么考虑的
carlonelong
2017-04-01 18:22:25 +08:00
非常烦
而且调试的时候,注释掉一行,就弹 xxx not used
senghoo
2017-04-01 18:26:43 +08:00
这个是错误和异常思维的不同而已。
推荐你看一个文章

http://www.jianshu.com/p/f30da01eea97
mooncakejs
2017-04-01 18:32:16 +08:00
又是挑事的吧,最近 go 和 rust 打的有点狠啊
chenset
2017-04-01 18:34:58 +08:00
zhs227
2017-04-01 18:38:24 +08:00
go 语言的洁癖真的很伤,注释掉一段代码,你可能需要删掉对应的包,删掉对应的未使用变量定义。

优点是容易发现,哦,原来这段代码不用了,删掉……
ovear
2017-04-01 18:42:45 +08:00
。。。
错误处理不是结合 panic 和 recover 以及 defer 么?
Numbcoder
2017-04-01 18:44:33 +08:00
非常烦
跟 js 的 callback 第一个参数是 err 一样烦,每个地方都要判断一下,好在 js 现在有 promise 了

@senghoo 但还是无法避免要大量判断 err 的问题
Muninn
2017-04-01 19:27:09 +08:00
@ovear 那是不正确的用法。。。
zyguan
2017-04-01 23:50:06 +08:00
之前针对这个问题写了个 https://github.com/zyguan/just

用来写些小工具还算方便,正规项目最好还是统一一下异常处理规范
aliipay
2017-04-02 00:39:29 +08:00
@zhs227
@carlonelong
这个感觉最蛋疼的,本来只想改一个地方调试,结果要改一大片
Unknwon
2017-04-07 06:01:53 +08:00
调试一时爽。。重构火葬场。。
u5f20u98de
2017-04-20 12:30:05 +08:00
一般 error 多了,我都这么偷懒处理,欢迎交流。
写一个专门处理简单 error 的工具函数,当然 panic 再 recover 传说会影响程序运行效率。
频繁出错的情况建议还是老老实实用 err 。
下面是个随手写的例子:
//panic 非空错误
func throw(err error) {
if err != nil {
panic(nil)
}
}
//然后在其他 func 里,定义好变量 error ,然后通过 recover 捕获 panic 的方法来减少代码量
func xxoo()(err error){
defer func(){
recover()
}()
var (
ret1, ret2, ret3 string
)
ret1,err=ooxx("aaa.php")
throw(err)
ret2,err=ooxx("bbb.php")
throw(err)
ret3,err=ooxx("ccc.jsp")
throw(err)
fmt.Println(ret1,ret2,ret3)
return
}

func ooxx(filename string)(string,error){
if strings.HasSuffix(filename,".jsp"){
return "",errors.New("bad file name:"+filename)
}
return filename,nil

}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/352035

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX