Выбор типа получателя
Часть раздела Логика и управление потоком путешествия по GO на Coddy — урок 9 из 68.
Теперь, когда вы понимаете как получатели-значения, так и получатели-указатели, ключевой вопрос заключается в следующем: когда следует использовать каждый из них? Решение сводится к тому, что вашему методу необходимо сделать с получателем.
Используйте указатель на получателя (pointer receiver), когда вашему методу необходимо изменить исходную структуру. Поскольку указатели на получателя работают с самим экземпляром структуры, любые изменения, внесенные внутри метода, сохранятся после завершения работы метода. Это необходимо для методов, которые обновляют поля, изменяют состояние или выполняют операции, которые должны повлиять на исходные данные.
Используйте value receiver, когда вашему методу нужно только считывать данные из struct без их изменения. Value receivers работают с копией, поэтому они идеально подходят для методов, которые вычисляют значения, форматируют вывод или выполняют любую операцию, не требующую изменения исходной struct. Они также обеспечивают безопасность, гарантируя, что исходные данные останутся неизменными.
Как общее правило: если ваш метод изменяет struct, используйте pointer receiver. Если ваш метод только считывает данные из struct, используйте value receiver. Этот подход делает намерения вашего кода понятными и помогает предотвратить непреднамеренные изменения ваших данных.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Шпаргалка
Используйте pointer receiver (получатель-указатель), когда вашему методу необходимо изменить исходную структуру:
- Изменения, внесенные внутри метода, сохранятся после завершения его работы
- Это необходимо для методов, которые обновляют поля или изменяют состояние
Используйте value receiver (получатель-значение), когда вашему методу нужно только прочитать данные из структуры:
- Метод работает с копией, поэтому исходные данные остаются неизменными
- Идеально подходит для методов, которые вычисляют значения или форматируют вывод
- Обеспечивает безопасность, гарантируя отсутствие непреднамеренных изменений
Общее правило: если ваш метод изменяет структуру, используйте pointer receiver. Если ваш метод только читает данные из структуры, используйте value receiver.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Switch с использованием `fallthrough`Выход из вложенных цикловПродолжение конкретного циклаОператор `goto`Итоги: Продвинутое управление циклами4Проект: Простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели по значениюПолучатели по указателюВыбор типа получателяМетоды против функцийИтоги: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение