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:
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.
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