¿Cuál es la forma preferida (o correcta) de agrupar un gran número de constantes relacionadas en el idioma Go? Por ejemplo, C# y C++ tienen enum
para esto.Agrupación de constantes en el idioma Go
Respuesta
const
?
const (
pi = 3.14
foo = 42
bar = "hello"
)
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++.
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. –
@Evan corregido, gracias. Probé mi ejemplo antes de publicar la respuesta, pero de alguna manera la asignación adicional apareció allí. – lnmx
No estoy seguro de si lo intentaste o no, pero ahora tienen el mismo valor y tipo. –
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).
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"
)
- 1. ¿En qué idioma está escrito el lenguaje de programación Go?
- 2. ¿Cómo utilizar el idioma Go con NetBeans IDE?
- 3. ¿cuál es el estado de la compatibilidad con IDE en el idioma go?
- 4. ¿Hay constantes para los códigos de idioma en java o en una biblioteca java?
- 5. Ir a idioma en el iPhone
- 6. Agrupación de .NET en el instalador
- 7. ¿Hay un bucle foreach en Go?
- 8. ¿Qué idioma se usa para escribir una biblioteca de juegos, Go or Rust?
- 9. Cliente de almacén de datos de Cassandra en lenguaje Go
- 10. compilación condicional en Go
- 11. Extracción de subcadenas en Go
- 12. ¿Para qué se utiliza Go?
- 13. Fusionar mapas en Go
- 14. Biblioteca compartida en Go?
- 15. Agrupación de fotos en R?
- 16. agrupación de conexiones en PHP
- 17. Agrupación de fechas en Django
- 18. Agrupación de correlación en R
- 19. agrupación de conexiones en Netty
- 20. Agrupación de texto en Python
- 21. Agrupación de matrices en PHP
- 22. manejo en Google idioma ir
- 23. Go, go get, go install, paquetes locales y control de versión
- 24. ¿El canal de Go devuelve dos valores?
- 25. bibliotecas de C++ que implementan Go rutinas o Go canales?
- 26. ¿Cómo puede una implementación de un idioma en el mismo idioma ser más rápido que el idioma?
- 27. Ajax cambiar el idioma
- 28. Computación en clúster en Go
- 29. Escogiendo el idioma correcto
- 30. XSLT Agrupación
¿podría ese bloque tener un nombre? –
@Darius: no :-(de todos modos esto no se está agrupando. –
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: –