«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Встраивание структур в Go: указатели или встроенные значения?

Встраивание структур в Go: указатели или встроенные значения?

Опубликовано 15 ноября 2024 г.
Просматривать:144

When Embedding Structs in Go: Pointers or Embedded Values?

Внедрение структур: когда лучше использовать указатели

При встраивании одной структуры в другую есть два варианта: использование указателя или встроенного значения . Чтобы принять это решение, важно понимать спецификации и учитывать преимущества каждого подхода.

Указатели против встроенных значений

Согласно спецификации Go, анонимное поле (также известное как встроенное поле) может быть объявлено как имя типа или как указатель на имя типа, не связанного с интерфейсом. Это означает, что у вас есть выбор: использовать тип log.Logger или указатель *log.Logger для поля Logger в следующем примере:

type Job struct {
    Command string
    *log.Logger
}

Преимущества указателей

В статье Эрика Урбана «Встраивание в Go» подчеркиваются преимущества встраивания указателя, которое называется «встраиванием по указателю». ." К ним относятся:

  • Гибкость инициализации: функции, использующие идиому NewX, обычно возвращают структуру по указателю, что позволяет легко инициализировать.
  • Динамическая расширяемость: внедрение указателя позволяет динамически изменять внедренный экземпляр во время выполнения без необходимости создания экземпляра структуры. Это может быть полезно для таких сценариев, как шаблон легковеса.

Пример внедрения указателя

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