Yo he tratado:
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 }
Primero, la declaración y la inicialización funcionan bien, pero el segundo, tercero y cuarto no funcionan. ¿Cómo puedo declarar e inicializar la matriz constante de flotadores?
[...]T
sintaxis es para azúcar[123]T
. Crea una matriz de tamaño fijo, pero permite que el compilador descubra cuántos elementos contiene.f(xs [5]int)
, no sabría si la matriz aprobada fue constante o mutable.cannot use constants.FilesRequired (type [4]string) as type []string in argument to strings.Join
De Go eficaz :
Los segmentos y las matrices siempre se evalúan durante el tiempo de ejecución:
[...]
le dice al compilador que calcule la longitud de la matriz en sí. Las rebanadas envuelven matrices y son más fáciles de trabajar en la mayoría de los casos. En lugar de usar constantes, simplemente haga que las variables sean inaccesibles para otros paquetes usando una primera letra minúscula:thisIsPrivate
está disponible solo en el paquete que está definido. Si necesita acceso de lectura desde el exterior, puede escribir una función getter simple (vea Getters en golang ).fuente
No existe la constante de matriz en Go.
Citando desde el Go Idioma Especificación: Constantes :
Una expresión constante (que se usa para inicializar una constante) puede contener solo operandos constantes y se evalúa en tiempo de compilación.
La especificación enumera los diferentes tipos de constantes. Tenga en cuenta que puede crear e inicializar constantes con expresiones constantes de tipos que tengan uno de los tipos permitidos como tipo subyacente . Por ejemplo, esto es válido:
Salida (pruébalo en Go Playground ):
Si necesita una matriz, solo puede ser una variable, pero no una constante.
Recomiendo este gran artículo de blog sobre constantes: Constantes
fuente
var arr = [2]int{2, 3}
Como otros han mencionado, no hay una construcción oficial de Go para esto. Lo más cercano que puedo imaginar sería una función que devuelva un segmento. De esta manera, puede garantizar que nadie manipulará los elementos del segmento original (ya que está "codificado" en la matriz).
He acortado tu porción para que sea ... más corta ...:
fuente
cannot use [6]string literal (type [6]string) as type []string in return argument
soreturn []float32 { ... }
...
para declarar un literal de corte en lugar de un literal de matriz. (2) cambie el tipo de retorno a[6]float32
. (3) asignar la expresión a una variable de matriz,a := [...]float32 { (etc.) }
y devolver la rebanada de todos los elementos:return a[:]
. (Los literales de matriz no son direccionables, no estoy claro por qué.)