"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo convertir una estructura en Go: incrustación, copia manual o conversión explícita?

¿Cómo convertir una estructura en Go: incrustación, copia manual o conversión explícita?

Publicado el 2024-11-09
Navegar:443

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

Conversión de estructura en Go

Considere las siguientes dos estructuras:

type A struct {
    a int
    b string
}

type B struct {
    A
    c string
}

Supongamos que tiene una variable de tipo A y desea convertirla al tipo B. ¿Es esto posible en Go, o necesita copiar campos manualmente o crear un método de conversión explícito?

]Método 1: Asignación de estructuras incrustadas

Como mencionó en su pregunta, la incrustación se puede utilizar para este propósito. Al incrustar A en B, puede convertir una variable de tipo A al tipo B simplemente asignándola al campo incrustado. Por ejemplo:

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

Este enfoque crea una nueva instancia de B que contiene los datos de A en su campo incrustado.

Método 2: Copia manual de campos

Alternativamente, puede copiar manualmente los campos de A a B de la siguiente manera:

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

Este método implica crear una nueva instancia de B y asignar manualmente los campos de A.

Método 3: Método de conversión explícita

Otra opción es crear un método de conversión explícito que convierta A en B. Esto podría ser útil si tiene una lógica de conversión compleja. Sin embargo, este enfoque no es necesario en este caso, ya que los métodos anteriores proporcionan una forma sencilla de lograr la conversión deseada.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3