GO参数传递:指针还是值

2019-11-08  本文已影响0人  天边一钩残月带三星

假设有以下三个方法

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. 大多数情况下使用指针传递。google开发组的经验是:“当你不知道改选择什么进行传递时,就使用指针吧”
  2. Slices, maps, channels, strings, function values, 和 interface values本身就是使用指针实现的,所以再使用指针传递是多余的
  3. 对于打的结构体,或者不得不修改的结构体传指针,否则传值,因为由于传递指针导致结构体被修改的问题很难被排查

详细分析

大多数情况下都要使用指针传递

还有一些情况不需要使用指针

大结构体和小结构体如何区分
没有相关知道,需要自己判断

参考

Pointers vs. values in parameters and return values

上一篇 下一篇

猜你喜欢

热点阅读