Saki's 研究记录

golang 关于函数的返回值问题

字数统计: 207阅读时长: 1 min
2021/10/20

函数返回值的一些实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type Mystruct struct{
Val int
}

func myfunc() Mystruct{
return Mystruct{Val:1}
}

func myfunc() *MyStruct {
return &MyStruct{}
}

func myfunc(s *MyStruct) {
s.Val = 1
}

三种方式的不同点:

  1. 第一个返回 struct 的 copy
  2. 第二个在函数内部创建一个 struct 的指针,然后返回
  3. 第三个传入一个已经存在的 struct,然后修改他的值

在很多源码里面见过这三种不同的用法,我是想知道这个的最佳实践是什么?什么时候应该用哪一种?

  1. 例如第一种用在一些小的 struct (因为这个花费是最小的),
  2. 第二种应用在大的 struct
  3. 而第三种可能就是为了非常的节约内存,因为你在不同的调用中重用 struct

Done.

CATALOG