在GoLang中按值传递或按引用传递更有效?

时间:2019-02-24 03:31:58

标签: go parameter-passing

假设我有一个结构,实现了如下所示的接口:

type IFace interface {
   Method1()
   Method2()
   Method3()
} 


type Face struct {
  Prop1 string
  Prop2 int
}


// IFace implementation here...

现在,如果我有接受IFace的方法,那么最好将它设计为接受指向该值接口的指针吗?

  1. 接受指针:
func DummyMethod(f *IFace) {
   (*f).Method1()
}
  1. 按值:
    func DummyMethod(f IFace){
      f.Method1()
    }

我的第一个猜测是,由于这些是结构体,因此最好通过值传递?还是有一个经验法则考虑何时开始传递指针的结构的大小和性质?

此外,当我们向结构中添加方法时,最好将指针传递给该结构或其值?

1 个答案:

答案 0 :(得分:1)

将接口类型作为参数传递时,按值传递, 请注意,接口类型本身将是指向具体类型的指针。

在性能方面,使用接口也要付费, 根本无法内联。

我想可以在每个请求/进入点使用十个调用的接口, 但是如果某个应用必须进行数千次调用,请在进行调用之前先对代码进行基准测试。