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

Как преобразовать структуру в Go: внедрение, копирование вручную или явное преобразование?

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

How to Convert a Struct in Go: Embedding, Manual Copying, or Explicit Conversion?

Преобразование структур в Go

Рассмотрим следующие две структуры:

type A struct {
    a int
    b string
}

type B struct {
    A
    c string
}

Предположим, у вас есть переменная типа A и вы хотите преобразовать ее в тип B. Возможно ли это в Go, или вам нужно вручную скопировать поля или создать явный метод преобразования?

Метод 1: присвоение встроенной структуры

Как вы упомянули в своем вопросе, для этой цели можно использовать встраивание. Встраивая A в B, вы можете преобразовать переменную типа A в тип B, просто назначив ее внедренному полю. Например:

func main() {
    structA := A{a: 42, b: "foo"}
    structB := B{A: structA} // Embed structA into structB
}

При таком подходе создается новый экземпляр B, который содержит данные из A во встроенном поле.

Метод 2: копирование полей вручную

Альтернативно вы можете вручную скопировать поля из A в B следующим образом:

func main() {
    structA := A{a: 42, b: "foo"}
    structB := B{
        A: structA, // Copy fields from structA
        c: "bar",
    }
}

Этот метод предполагает создание нового экземпляра B и ручное назначение полей из A.

Метод 3: метод явного преобразования

Другой вариант заключается в создании явного метода преобразования, который преобразует A в B. Это может быть полезно, если у вас сложная логика преобразования. Однако в данном случае такой подход не обязателен, поскольку описанные выше методы обеспечивают простой способ достижения желаемого преобразования.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3