PHP转go刚入门。。我可以不写err != nil嘛?

gi19901212 · 2019-04-07 20:44:04 · 4955 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2019-04-07 20:44:04 的主题,其中的信息可能已经有所发展或是发生改变。

感觉err != nil这玩意太影响效率了,而且大多数情况下我根本就没有在里面写东西,就是一空壳, 我在github上下载的许多项目都是这样不实际处理err,却又写个err != nil的空壳子出来。 所以我可以在项目中大范围放弃写这种err != nil吗?就像PHP那样。。。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4955 次点击  
加入收藏 微博
15 回复  |  直到 2019-04-30 10:59:28
ChenWoChong
ChenWoChong · #1 · 6年之前

err存在的目的就是为了帮助分析处理可能出现的异常,或者记录。如果这些你都不想做,直接忽略就可以,当然没有问题

jarlyyn
jarlyyn · #2 · 6年之前

像php那样你是准备 try catch还是什么都不写?

try catch比if err!=nil废脑多了。

gi19901212
gi19901212 · #3 · 6年之前

@jarlyyn 我刚想说这个,try catch我也不是到处都写啊,我认为可能出错的地方写一写,完全可以接受。但是err!=nil到处都有,才惹我吐槽啊。

mu1er
mu1er · #4 · 6年之前

err 用 _ 忽略就行了啊,在你认为出错的地方写上就OK了

BlackBerryX
BlackBerryX · #5 · 6年之前

try catch和err != nil 是2种不同的错误处理模式啊。try catch是不管包含的范围内出现多少错误,什么错误一概捕获,然后该处理的处理,但实际使用都是直接向上层抛。而err != nil是为了精准的处理错误,控制程序异常,提高程序的健壮性,发现一个处理一个。

jjmgx
jjmgx · #6 · 6年之前

最早我也讨厌err!=nil,后来在做应用时才知道,真是太有用了。有了它程序才更健壮,千万不要用_忽略。go开发的程序稳定性非常好。err的功劳最大。

Coder-zheng
Coder-zheng · #7 · 6年之前
jjmgxjjmgx #6 回复

最早我也讨厌err!=nil,后来在做应用时才知道,真是太有用了。有了它程序才更健壮,千万不要用_忽略。go开发的程序稳定性非常好。err的功劳最大。

哈哈哈,今天我写 rpc 忽略了 其中一个 err ,找了半天才找到。。。

lyg50358
lyg50358 · #8 · 6年之前

从拍错的角度来说我不喜欢try cache

igufei
igufei · #9 · 6年之前

这就是golang 语言的特性,我一开始 也不习惯,时间长了就习惯了

代码太丑了

qlaall
qlaall · #10 · 6年之前

try-catch其实是很好用的 但是我才学Go 所以没法做比较,但是在java的经验看来,try-catch是个非常好的设计

saberlong
saberlong · #11 · 6年之前
qlaallqlaall #10 回复

try-catch其实是很好用的 但是我才学Go 所以没法做比较,但是在java的经验看来,try-catch是个非常好的设计

这点,我只能说各有优势。 try-catch我就举个反例,对于开发经验不足的人来说,try-catch会埋下无数坑。 他们不太喜欢错误处理,也不会花费精力思考每个调用异常的处理。 然后就会出现几种情况,外层捕获了,打印了日志以及错误堆栈对大多情况还是可以的。 但是偏偏有人喜欢吃掉堆栈,或者就不捕获。code review时,随着调用层数增多,就得花费更多的精力里里外外看一遍,思考是否存在问题。也就是开发人员将大量本应做的工作转嫁给review的人。如果没有review,那么就祈祷不会出错吧,至少祈祷日志包含了错误堆栈吧。 golang的这个不优雅,但是能告诉使用的人去正视错误,并思考如何处理

fwhez
fwhez · #12 · 6年之前

try catch 在用户未处理异常时不作提醒,只有点进函数细节,才能看到throw的声明。 而err 在用户未处理时,编译报错,告知用户该函数有可能抛出错误,只有用户显式使用_才可以不处理err

二者的区别很明显,err的错误是否存在,是否该处理,完全可以由用户判断 而try catch,用户可能在不知情的情况下,忽略掉一下异常。

buguang01
buguang01 · #13 · 6年之前

https://studygolang.com/articles/20054

给你一个在GO里面写try catch的方法。

amn2811
amn2811 · #14 · 6年之前

可以用匿名变量_忽略返回值

result,_:=Test()

phper-chen
phper-chen · #15 · 6年之前

这个是最简洁的错误处理之道了 人为传递错误出栈 减少你的出错率

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传