Передача по значению или передача по ссылке более эффективны в GoLang? - PullRequest
0 голосов
/ 24 февраля 2019

Допустим, у меня есть структура, реализующая интерфейс, подобный приведенному ниже:

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


type Face struct {
  Prop1 string
  Prop2 int
}


// IFace implementation here...

Теперь, если у меня есть метод, который принимает IFace, лучше ли спроектировать его так, чтобы он принимал указатель на этот интерфейс значений?

  1. Принять указатель:
func DummyMethod(f *IFace) {
   (*f).Method1()
}
По значению:
    func DummyMethod(f IFace){
      f.Method1()
    }

Мое первое предположение состоит в том, что, поскольку это структуры, возможно, лучше передавать по значению?Или есть эмпирическое правило, учитывающее размер и природу структуры, когда начинать передавать указатель?

Кроме того, когда мы добавляем методы в структуру, лучше передать указатель на структуру или этозначение?

1 Ответ

0 голосов
/ 24 февраля 2019

При передаче типа интерфейса в качестве параметра передайте его по значению, обратите внимание, что сам тип интерфейса будет указателем на конкретный тип.

Когда речь идет о производительности, использование интерфейса сопряжено с ценой., он просто не может быть встроен.

Полагаю, это нормально - использовать интерфейс с дюжиной вызовов на одну точку запроса / входа, но если приложение должно выполнить более тысячи вызовов, сначала сравните ваш код перед выполнением вызова.

...