Когда использовать указатели

Я новичок в языке Go и имею только минимальный фон в C/С++, поэтому, естественно, я борюсь с идеей использования указателей и когда не использовать указатели. Хотя этот вопрос можно считать открытым, мне интересно, какие некоторые рекомендации о том, когда возвращать структуры и когда возвращать указатели (и, что то же самое, когда принимать конструкторы/указатели в качестве аргументов).

Из того, что я могу догадаться, выполняются следующие утверждения:

  • structs передаются в функции по значению. То есть, копия структуры создается при передаче ее в функцию.
  • Если я хочу передать структуру по ссылке, то вместо этого я бы использовал аргумент указателя в определении функции и использовал оператор addressof при вызове функции.
  • Причина, по которой я хотел бы передать структуру по ссылке, состоит в том, что либо структура, которую я передаю, большая, и она будет облагать памятью, чтобы передать ее по значению (маловероятно), или если я хочу сделать изменения в копии, которую я передаю (скорее).
  • В качестве следствия 3.), я должен пройти по значению, если у меня нет одной из причин, изложенных выше, по ссылке.

Правильны ли мои предположения? Или мне не хватает метки на указателях?

Ответы

Ответ 1

Ваши предположения верны. О # 3, Go - это параллельный язык и передача по ссылке в goroutines заставляют их читать одну и ту же структуру, которая безопасна, но также заставляют их изменять ту же структуру, которая является опасной.