Go Структурные функции и * - PullRequest
0 голосов
/ 01 мая 2020

Итак, я начал изучать go совсем недавно, и мне было интересно, что означает * при добавлении функции в структуру. Когда у меня, например, есть следующая структура:

type Cool struct {
}

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

func (c Cool) doSmth() {

}
func (c *Cool) doSmth() {

}

, потому что я столкнулся со странным вопрос, который я не могу объяснить себе. Возможно ли, что * имеет отношение к ссылке на структуру? Потому что я заглянул в C ++, и была разница между использованием * для указателей и для обращения к переменным при передаче их в функцию.

Заранее спасибо за вашу помощь!

1 Ответ

0 голосов
/ 01 мая 2020

Помещение звездочки перед типом получателя означает, что указатель на получателя передается методу (некоторые люди называют это передачей по ссылке). Это то же самое, что и при передаче параметра - ie: по значению или использование * для передачи указателя на него.

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

Вы также передали бы указатель, когда структура велика, так как указатель составляет всего несколько байтов (обычно 8) и если структура больше, чем это, то это сэкономит время и память (пространство стека). Но это не так важно, если структура действительно большая или метод вызывается очень часто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...