golang 函数返回值 2 个写法,哪个更好?

2021-07-12 18:05:07 +08:00
 wangbenjun5
自己平时写项目,喜欢把返回值 return 回去,比如

所以一般函数都是 function_name()([]struct, error)这种形式。

但是我经常也看到很多人喜欢另一种写法,就是把返回值作为参数传进去,最后只 return error,像这样 function_name(result *[]struct) error

结果都是一样,但是过程不一样,我的那种方式需要在函数里面创建一个 slice,把结果塞进去 return 。但是传参数这种方式,可以直接拿来用,所以理论上第二种方式更高效吗?

大家喜欢哪种写法?
3630 次点击
所在节点    Go 编程语言
31 条回复
k9982874
2021-07-12 20:30:41 +08:00
第一种,第二种如果没有吃透指针很容易火葬场
githubhaoliu
2021-07-12 21:05:43 +08:00
修改了就要返回新值,第二种容易出 bug.
sunmoon1983
2021-07-12 21:31:53 +08:00
从来不用第二种,都是第一种
janxin
2021-07-12 22:03:00 +08:00
你们不用第二种怎么设计 Decode 、Unmarshal 之类的场景的...

不过一般来说看情况,第一种比较简单,但不是所有的问题都用第一种都能解决
streamrx
2021-07-13 02:53:59 +08:00
第一种
sxfscool
2021-07-13 09:17:12 +08:00
多返回值不香么,为啥还要用没有多返回值语言的方式
cyrivlclth
2021-07-13 09:32:06 +08:00
一般用第一种吧,第二种多见 Decode Unmarshal 或者 各种库,传的是 interface{},因为不知道你想转换成什么类型所以需要传进去
dazui
2021-07-13 10:47:51 +08:00
传指针这个语法既然有,也不是不能用,可以尽量避免在没有必要时使用,在对象创建和复制开销没有压力的情况下,依赖 GC 是很好的方案。但如果性能存在压力时,通过传指针来尽量减少对象的复制与创建,是可行的优化方案。
jingslunt
2021-07-13 15:15:38 +08:00
@bringyou 泛型有了

type Num interface {}
func min[T Num](a, b T) T{}
index90
2021-07-14 10:32:07 +08:00
accept interface, return struct
liberize
2021-07-14 18:55:29 +08:00
偏向第二种,很多时候比较简洁

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

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

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

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

© 2021 V2EX