Встраивание структур в Go: когда использовать указатель
При рассмотрении вопроса о встраивании одной структуры в другую, решение о том, использовать ли указатель, принимается или возникает значение для встроенного поля. В этой статье рассматриваются нюансы этого выбора реализации и приводятся примеры, иллюстрирующие потенциальные преимущества и последствия.
Встраивание с помощью указателя
Спецификация Go позволяет встраивать структуры в виде указателей. или ценности. Для типов, не являющихся интерфейсом, допускается указание анонимного поля в качестве имени типа T или указателя на имя типа, не являющегося интерфейсом *T.
Преимущества внедрения по указателю:
Внедрение по значению
Внедрение структуры как value встраивает всю свою функциональность без необходимости знания создания экземпляра. Он эффективно продвигает методы встроенной структуры во включающую структуру.
Рассмотрите следующие примеры:
type Job struct {
Command string
*log.Logger
}
В этом примере структура Job внедряет указатель на тип log.Logger. Этот подход позволяет структуре Job получать доступ к методам Logger, одновременно допуская динамическое назначение различных экземпляров Logger.
type Job struct {
Command string
log.Logger
}
Здесь структура Job напрямую встраивает тип log.Logger в качестве значения. Доступ к расширенным методам Logger теперь можно получить непосредственно из структуры Job.
Заключение
Как встраивание по указателю, так и по значению имеет свои уникальные преимущества и особенности. Выбор между двумя подходами зависит от того, желательно ли динамическое назначение или продвижение методов. Понимание последствий каждого метода может помочь в принятии обоснованных решений при встраивании структур в Go.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3