"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 > Al incrustar estructuras en Go: ¿punteros o valores incrustados?

Al incrustar estructuras en Go: ¿punteros o valores incrustados?

Publicado el 2024-11-15
Navegar:118

When Embedding Structs in Go: Pointers or Embedded Values?

Incrustar estructuras: cuándo preferir punteros

Al incrustar una estructura dentro de otra, hay dos opciones: usar un puntero o un valor incrustado . Para guiar esta decisión, es importante comprender las especificaciones y considerar las ventajas de cada enfoque.

Punteros versus valores integrados

Según la especificación Go, un El campo anónimo (también conocido como campo incrustado) se puede declarar como un nombre de tipo o como un puntero a un nombre de tipo que no es de interfaz. Esto significa que tiene la opción de utilizar el tipo log.Logger o un puntero *log.Logger para el campo Logger en el siguiente ejemplo:

type Job struct {
    Command string
    *log.Logger
}

Beneficios de los punteros

El artículo "Incrustar en Go" de Eric Urban destaca las ventajas de incrustar un puntero, lo que se conoce como "incrustar por puntero ". Estos incluyen:

  • Flexibilidad de inicialización: las funciones que utilizan el idioma NewX generalmente devuelven una estructura por puntero, lo que permite una fácil inicialización.
  • Extensibilidad dinámica: incrustar un puntero le permite cambiar la instancia incrustada dinámicamente en tiempo de ejecución sin tener que crear una instancia de la estructura. Esto puede resultar útil para escenarios como el patrón Flyweight.

Ejemplo de incrustación de puntero

type Bitmap struct{
    data [4][5]bool
}

type Renderer struct{
    *Bitmap //Embed by pointer
    on uint8
    off uint8
}

En este ejemplo, el tipo Renderizador incrusta un mapa de bits por puntero. Esto significa que varias instancias de Renderer pueden compartir una sola instancia de Bitmap y personalizar su comportamiento de forma independiente.

Limitaciones técnicas

Es importante tener en cuenta que no se pueden utilizar punteros a punteros. o punteros a interfaces como campos anónimos. Esta restricción surge del hecho de que estos tipos no tienen métodos, que es un aspecto clave de la incrustación. Los métodos se promocionan del tipo incrustado al tipo incrustado, lo que le permite acceder a ellos directamente.

Ú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