Como declarar mapa constante
Estou tentando declarar constante no Go, mas está lançando um erro. Alguém poderia me ajudar com a sintaxe de declarar uma constante no Go?
— samol
Sua sintaxe está incorreta. Para criar um mapa literal (como uma pseudo-constante), você pode:
Dentro de um funcvocê pode declarar como:
E no Go não existe um mapa constante. Mais informações podem ser encontradas aqui .
Experimente no playground Go.
— esquizofrênico
Isso lança um non-declaration statement outside function bodytempo de compilação na verdade. Por quê?
— Alediaferia
@AlessandroDiaferia Não recebo esse erro. Como você está usando isso?
— squiguy
— B-Scan.
@alediaferia você recebe esse erro se estiver usando :=fora de uma função.
O que é uma "pseudo-constante"?
Você pode criar constantes de várias maneiras diferentes:
Você também pode criar uma constante enum:
Você não pode criar constantes de mapas, matrizes e está escrito de forma eficaz :
As constantes em Go são exatamente isso - constantes. Eles são criados em tempo de compilação, mesmo quando definidos como locais em funções, e podem ser apenas números, caracteres (runas), strings ou booleanos. Devido à restrição de tempo de compilação, as expressões que os definem devem ser expressões constantes, avaliadas pelo compilador. Por exemplo, 1 << 3 é uma expressão constante, enquanto math.Sin (math.Pi / 4) não ocorre porque a chamada de função para math.Sin precisa ocorrer em tempo de execução.
então é mais como um constexpr C ++ 11 ... por que math.Sin não é uma função constexpr, então!
Suas declarações estão corretas, mas a pergunta era sobre a criação de um mapa constante.
— jzer7
@ jzer7 você pode me explicar por que minha resposta é irrelevante? Ele perguntou como criar algo, eu disse a ele que isso não é possível. Explicou o que é possível e citou os documentos por que exatamente não é possível fazer o que ele deseja.
Você pode emular um mapa com um fechamento:
Experimente no playground Go
— oleber
(TestMostSoldRecommender?)
É de fato uma solução possível. No entanto, como o autor não explicou nada (e colocou tudo em um caso de teste com nome estranho), a resposta parece incorreta. A lógica é: (1) Criar uma função anônima (2) A função anônima encapsula o map(3) A função anônima retorna "uma função que aceita um int e retorna uma string" (4) A função retornada faz o int -> string mapeamento usando o map(5) Execute a função anônima imediatamente e atribua a função retornada a uma variável. Essa variável pode ser usada como uma função e o efeito é como um mapa.
— Siu Ching Pong -Asuka Kenji-
E como sugerido acima por Siu Ching Pong -Asuka Kenji com a função que, na minha opinião, faz mais sentido e deixa você com a conveniência do tipo de mapa sem o wrapper de função:
Tente isso em play.golang.org.
— Denis Volin
Como mencionado acima, para definir um mapa como constante, não é possível. Mas você pode declarar uma variável global que é uma estrutura que contém um mapa.