Estructura anónima: revelando las diferencias entre struct{}{} y {}
En Go, declarando mapas de estructuras de cadena a anónimas se puede hacer de dos maneras:
var Foo = map[string]struct{}{
"foo": struct{}{},
}
var Foo = map[string]struct{}{
"foo": {},
}
Si bien ambas expresiones son válidas, la segunda genera una advertencia en Gogland con respecto a una "declaración de tipo redundante". Para aclarar, exploremos las diferencias subyacentes entre estas dos formas.
En primer lugar, considere lo siguiente:
struct{}{}
Este es un literal compuesto que consta del tipo (struct{}) y su valor ({}). En contraste, esto:
{}
Es un literal compuesto que omite el tipo y retiene solo el valor.
Por lo general, los literales compuestos requieren la inclusión de especificación de tipo para ayudar al compilador a identificar el tipo deseado. Según la especificación del lenguaje:
CompositeLit = LiteralType LiteralValue .
Sin embargo, al definir un literal compuesto de mapa, los tipos de clave y valor ya están especificados por el tipo de mapa. Por lo tanto, en los casos en los que planee proporcionar valores de estos tipos especificados, se puede omitir la especificación de tipo.
Esta omisión está sancionada por la especificación Go, que establece:
"Within a composite literal of array, slice, or map type T, elements or map keys that are themselves composite literals may elide the respective literal type if it is identical to the element or key type of T."
En conclusión, los dos Las expresiones presentadas al principio logran el mismo resultado final. Sin embargo, este último aprovecha una característica del lenguaje que permite la omisión de especificación de tipo redundante en literales compuestos de mapas.
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