Внедрение структур: когда лучше использовать указатели
При встраивании одной структуры в другую есть два варианта: использование указателя или встроенного значения . Чтобы принять это решение, важно понимать спецификации и учитывать преимущества каждого подхода.
Указатели против встроенных значений
Согласно спецификации Go, анонимное поле (также известное как встроенное поле) может быть объявлено как имя типа или как указатель на имя типа, не связанного с интерфейсом. Это означает, что у вас есть выбор: использовать тип log.Logger или указатель *log.Logger для поля Logger в следующем примере:
type Job struct {
Command string
*log.Logger
}
Преимущества указателей
В статье Эрика Урбана «Встраивание в Go» подчеркиваются преимущества встраивания указателя, которое называется «встраиванием по указателю». ." К ним относятся:
Пример внедрения указателя
type Bitmap struct{
data [4][5]bool
}
type Renderer struct{
*Bitmap //Embed by pointer
on uint8
off uint8
}
В этом примере тип Renderer встраивает растровое изображение по указателю. Это означает, что несколько экземпляров Renderer могут использовать один экземпляр Bitmap и независимо настраивать свое поведение.
Технические ограничения
Важно отметить, что вы не можете использовать указатели на указатели. или указатели на интерфейсы в виде анонимных полей. Это ограничение связано с тем, что у этих типов нет методов, что является ключевым аспектом внедрения. Методы переводятся из встроенного типа во внедренный тип, что позволяет вам обращаться к ним напрямую.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3