Eu tentei:
const ascii = "abcdefghijklmnopqrstuvwxyz"
const letter_goodness []float32 = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = []float32 { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
Primeiro, a declaração e a inicialização funcionam bem, mas a segunda, terceira e quarta não funcionam. Como posso declarar e inicializar const array de carros alegóricos?
[...]T
sintaxe é para o açúcar[123]T
. Ele cria uma matriz de tamanho fixo, mas permite que o compilador descubra quantos elementos estão nela.f(xs [5]int)
, não saberia se a matriz passada era constante ou mutável.cannot use constants.FilesRequired (type [4]string) as type []string in argument to strings.Join
Do Effective Go :
Fatias e matrizes são sempre avaliadas durante o tempo de execução:
[...]
diz ao compilador para descobrir o comprimento da própria matriz. As fatias envolvem matrizes e são mais fáceis de trabalhar na maioria dos casos. Em vez de usar constantes, apenas torne as variáveis inacessíveis para outros pacotes usando uma primeira letra minúscula:thisIsPrivate
está disponível apenas no pacote que está definido. Se você precisar de acesso de leitura de fora, poderá escrever uma função getter simples (consulte Getters em golang ).fonte
Não existe constante de matriz no Go.
Citando a partir da especificação de idioma Go: Constantes :
Uma expressão constante (que é usada para inicializar uma constante) pode conter apenas operandos constantes e é avaliada em tempo de compilação.
A especificação lista os diferentes tipos de constantes. Observe que você pode criar e inicializar constantes com expressões constantes de tipos com um dos tipos permitidos como o tipo subjacente . Por exemplo, isso é válido:
Saída (experimente no Go Playground ):
Se você precisar de uma matriz, ela pode ser apenas uma variável, mas não uma constante.
Eu recomendo este excelente artigo do blog sobre constantes: Constantes
fonte
var arr = [2]int{2, 3}
Como outros já mencionaram, não existe uma construção Go oficial para isso. O mais próximo que posso imaginar seria uma função que retorne uma fatia. Dessa forma, você pode garantir que ninguém manipule os elementos da fatia original (pois ela é "codificada" na matriz).
Reduzi sua fatia para torná-la ... mais curta ...:
fonte
cannot use [6]string literal (type [6]string) as type []string in return argument
assimreturn []float32 { ... }
...
para declarar uma fatia literal em vez de uma matriz literal. (2) altere o tipo de retorno para[6]float32
. (3) atribuir a expressão para uma variável de matriz,a := [...]float32 { (etc.) }
e voltar a fatia de todos os elementos:return a[:]
. (Literais de matriz não são endereçáveis, eu não estou claro por que.)