1
keepeye 2021 年 7 月 12 日
大多第一种,第二种像是写 c
|
2
wangbenjun5 OP 这种把返回值定义好传到目标函数里面获取结果的写法很常见,貌似写 c 语言的比较喜欢这种写法吧?
|
3
darksword21 PRO 第一种,改别人代码时被第二种坑过
|
4
darksword21 PRO 看错了抱歉,无视上面⬆️
|
5
morty0 2021 年 7 月 12 日 第二种哪里高效了,slice 不也要在外面创建吗
|
6
wangbenjun5 OP @morty0 但是可能那个 slice 在外面本来就需要创建,所以
|
7
wangbenjun5 OP @keepeye 是的,有这个感觉,我还见过有写 Python 的也是这种写法
|
8
colors 2021 年 7 月 12 日
第二种不可取,很容易出问题,而且没有更高效
|
9
generic 2021 年 7 月 12 日
GC 语言里创建 slice 开销较低,如非必要都用第一种。
|
10
wangbenjun5 OP @generic 不一定是 slice,也可能是对象等其它指针类型
|
11
mainjzb 2021 年 7 月 12 日 go 选第一种
C/C++ 选第二种为了控制生命周期,而且他们只能返回一个值,那必然只能返回 err { auto X = NewResult(); GetResult(X); DoSomething(X); //Delete(X); } C++讲究谁创建,谁释放, 你创建,我忘了释放,那就傻逼了。GetResult 完全可是是 RPC 或者底层库,或者其他不是我写的代码。 |
12
wangbenjun5 OP @mainjzb 突然想起来了,很多语言函数只能返回一个值,哈哈,原来如此
|
13
chotow 2021 年 7 月 12 日 via iPhone
看标题还以为比较的是 function_name()([]struct, error) 和 function_name()(ret[]struct, err error) 这两种写法 😑
|
14
XCFOX 2021 年 7 月 12 日
|
15
pkoukk 2021 年 7 月 12 日
个人一般只有涉及反序列化才会用第二种,类似 json.Unmarshal()这种行为的时候才会通过指针替换原来对象里的值
|
16
wangbenjun5 OP @chotow 你说的第二种也操蛋,我极少用
|
17
zoharSoul 2021 年 7 月 12 日
函数最好不要有副作用,
后面看代码很累. 一个对象进去一次就变了跟魔法一样 |
18
generic 2021 年 7 月 12 日
@wangbenjun5 我觉得也一样,除非你预期用户几乎总是会重用一个对象作为输出,或者这就是优化的关键点,否则不值得操这个心。
|
19
bringyou 2021 年 7 月 12 日
补充一条,因为 go 没有泛型,在一些场合下,第一种调用方还需要来一次类型强转,第二种不用
|
20
ylsc633 2021 年 7 月 12 日
引用类型的 是可以这么用
但是不建议这样用, 因为你不知道在什么地方改了它, 然后在另外一个地方用了它 所以我一般都是第一种 另外,多个返回值真的非常好用 还有结构体 可以在一个文件里 定义多个实在是太爽了 |
21
k9982874 2021 年 7 月 12 日 via Android
第一种,第二种如果没有吃透指针很容易火葬场
|
22
githubhaoliu 2021 年 7 月 12 日
修改了就要返回新值,第二种容易出 bug.
|
23
sunmoon1983 2021 年 7 月 12 日
从来不用第二种,都是第一种
|
24
janxin 2021 年 7 月 12 日
你们不用第二种怎么设计 Decode 、Unmarshal 之类的场景的...
不过一般来说看情况,第一种比较简单,但不是所有的问题都用第一种都能解决 |
25
streamrx 2021 年 7 月 13 日 via iPhone
第一种
|
26
sxfscool 2021 年 7 月 13 日
多返回值不香么,为啥还要用没有多返回值语言的方式
|
27
cyrivlclth 2021 年 7 月 13 日
一般用第一种吧,第二种多见 Decode Unmarshal 或者 各种库,传的是 interface{},因为不知道你想转换成什么类型所以需要传进去
|
28
dazui 2021 年 7 月 13 日
传指针这个语法既然有,也不是不能用,可以尽量避免在没有必要时使用,在对象创建和复制开销没有压力的情况下,依赖 GC 是很好的方案。但如果性能存在压力时,通过传指针来尽量减少对象的复制与创建,是可行的优化方案。
|
30
index90 2021 年 7 月 14 日
accept interface, return struct
|
31
liberize 2021 年 7 月 14 日 via Android
偏向第二种,很多时候比较简洁
|