Estrutura anônima: revelando as diferenças entre estrutura{}{} e {}
In Go, declarando mapas de estrutura de string para anônimo pode ser feito de duas maneiras:
var Foo = map[string]struct{}{
"foo": struct{}{},
}
var Foo = map[string]struct{}{
"foo": {},
}
Embora ambas as expressões sejam válidas, a segunda gera um aviso em Gogland sobre uma "declaração de tipo redundante". Para esclarecer, vamos explorar as diferenças subjacentes entre essas duas formas.
Em primeiro lugar, considere o seguinte:
struct{}{}
Este é um literal composto consistindo no tipo (struct{}) e seu valor ({}). Por outro lado, isto:
{}
É um literal composto que omite o tipo e retém apenas o valor.
Normalmente, literais compostos exigem a inclusão de especificação de tipo para ajudar o compilador a identificar o tipo pretendido. De acordo com a especificação da linguagem:
CompositeLit = LiteralType LiteralValue .
No entanto, ao definir um literal composto de mapa, os tipos de chave e valor já são especificados pelo tipo de mapa. Portanto, nos casos em que você planeja fornecer valores desses tipos especificados, a especificação do tipo pode ser omitida.
Essa omissão é sancionada pela especificação Go, que afirma:
"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."
Em conclusão, os dois expressões apresentadas no início alcançam o mesmo resultado final. No entanto, este último aproveita um recurso de linguagem que permite a omissão de especificação de tipo redundante em literais compostos de mapas.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3