2011-08-04 9 views

Respuesta

5

const?

const (
    pi = 3.14 
    foo = 42 
    bar = "hello" 
) 
+0

¿podría ese bloque tener un nombre? –

+1

@Darius: no :-(de todos modos esto no se está agrupando. –

+0

Puede darle un nombre a un bloque en cierto sentido si le da a todas las constantes el mismo tipo definido por el usuario. Algo así como lo que lnmx está tratando de hacer en el MyFlag ejemplo: –

11

Hay dos opciones, dependiendo de cómo se usarán las constantes.

La primera es crear un nuevo tipo basado en int, y declarar sus constantes el uso de este nuevo tipo, ej .:

type MyFlag int 

const (
    Foo MyFlag = 1 
    Bar 
) 

Foo y Bar tendrá tipo MyFlag. Si desea extraer el valor int volver de un MyFlag, necesita un tipo de coacción:

var i int = int(Bar) 

Si esto es un inconveniente, sugerencia uso de newacct de un bloque const desnudo:

const (
    Foo = 1 
    Bar = 2 
) 

Foo y Bar son constantes perfectas que se pueden asignar a int, float, etc.

Esto se cubre en Effective Go en la sección Constantes. Consulte también la discusión de la palabra clave iota para la asignación automática de valores como C/C++.

+1

Esto no es del todo correcto. En el primer ejemplo, Bar está sin tipo. Solo seleccionaría el tipo de Foo si el lado derecho de la tarea estuviera en blanco. Tendría razón al usar iota en este caso. –

+0

@Evan corregido, gracias. Probé mi ejemplo antes de publicar la respuesta, pero de alguna manera la asignación adicional apareció allí. – lnmx

+0

No estoy seguro de si lo intentaste o no, pero ahora tienen el mismo valor y tipo. –

2

Depende de qué desea lograr con esta agrupación. Go permite agrupar con los siguientes apoyos sintaxis:

const (
    c0 = 123 
    c1 = 67.23 
    c2 = "string" 
) 

Lo cual añade bonito del visual para un programador (editores permiten doblarla), pero no hace nada por un compilador (no se puede especificar un nombre para un bloque) .

Lo único que depende de este bloque es el iota constant declaration en Go (que es bastante útil para enum). Le permite crear incrementos automáticos fácilmente (mucho más que incrementos automáticos: más sobre esto en el enlace).

Por ejemplo esto:

const (
    c0 = 3 + 5 * iota 
    c1 
    c2 
) 

creará constantes c0 = 3 (3 + 5 * 0), c1 = 8 (3 + 5 * 1) y c2 = 13 (3 + 5 * 2).

1

Mi acercamiento más cercano a las enumeraciones es declarar las constantes como un tipo. Al menos tienes algún tipo de seguridad que es la mayor ventaja de un tipo de enumeración.

type PoiType string 

const (
    Camping   PoiType = "Camping" 
    Eatery    PoiType = "Eatery" 
    Viewpoint   PoiType = "Viewpoint" 
)