Go – Constants
Introducción
En esta entrada, voy a hablar de constantes o constants.
Veremos cómo declararlas en Go, y por supuesto cómo utilizarlas.
Declaración de una constante en Go
Una constante se declara en Go utilizando la palabra reservada const.
La nomenclatura tipo de declaración de una constante se puede declarar infiriendo el tipo directamente, o dejando que sea Go quién lo infiera a partir de su dato.
Una declaración de constante sin inferir el tipo, sería algo parecido a:
const <variable_name> = <value>
Por ejemplo:
const country = "Spain"
Y una declaración de constante infiriendo el tipo, sería en su caso de esta otra forma:
const <variable_name> <varirable_type> = <value>
Por ejemplo:
const country string = "Spain"
Ahora bien, en Go es posible declarar múltiples constantes de diferentes formas y al mismo tiempo.
Por ejemplo de esta manera:
const one, two, three = "1", 2, true
Si observamos el ejemplo, veremos que hemos declarado tres constantes, una de tipo string, otra int, y una tercera bool, todas ellas declaradas e inicializadas como constantes en la misma línea de código.
Y exactamente podemos declarar también nuestras constantes anidándolas entre paréntesis, como por ejemplo:
const (
four = "Four"
five = 5.1
)
Aquí al igual que en el caso anterior, Go estará infiriendo el tipo de estas constantes a partir de su valor, por lo que la primera de ellas será de tipo string, y la segunda de tipo float64 en mi caso (estoy dentro de un entorno de 64 bits, si estuviera en un entorno de 32 bits sería de tipo float32).
Diferencias entre indicar el tipo o no en una constante
Aunque pueda parecer lo mismo, ya que parece que en general puede que se esté infiriendo el tipo correcto, la realidad es que sino indicamos su tipo, tendremos más flexibilidad a la hora de asignar compatibilidad a ese tipo de variable o mezclar éstas con operaciones matemáticas, algo que una constante tipada no te va a ofrecer.
Explicaré esto con un ejemplo sencillo para que se entienda mejor.
Imaginemos que tenemos cuatro variables (value1, value2, value3 y value4).
Las tres primeras variables tienen los valores 1, 2 y 3 y no hemos indicado su tipo, por lo que Go los inferirá como int.
Y la cuarta variable tiene el valor 4, pero en Go lo hemos declarado como int.
La lógica nos hace pensar que podríamos operar con todas ellas de forma fácil, por lo que podríamos escribir nuestro código de ejemplo como:
const value1 = 1
const value2 = 2
const value3 = 3
const value4 int32 = 4
result1 := value1 + value2
fmt.Printf("%v - %T\n", result1, result1)
result2 := result1 + value3
fmt.Printf("%v - %T\n", result2, result2)
result3 := result1 + value4
fmt.Printf("%v - %T\n", result3, result3)
En este ejemplo, result1 dará como resultado 3.
Y result2 dará como resultado 6.
Pero result3 no dará como resultado 7, sino que dará un error, ya que value4 no es int, sino int32.
Es por todo esto, que cuando trabajamos con constantes y operaciones entre ellas, debemos controlar los tipos con los que trabajamos o podemos trabajar.
Ámbito de declaración de constantes en Go
Otro aspecto relevante es el ámbito de una constante en Go.
Podemos declarar una constante dentro de una función, o bien fuera de ella.
Si la declaramos a partir de las importaciones, tendrá un ámbito local y de acceso desde todas las funciones si la declaramos comenzando por una letra minúscula, o bien global y por tanto exportable, si el primer carácter de la constante, empieza por mayúscula.
Por ejemplo:
package main
import "fmt"
const Department string = "Human Resources"
const city string = "Madrid"
func main() {
fmt.Printf("%v - %T\n", Department, Department)
fmt.Printf("%v - %T\n", city, city)
}
Espero que esta entrada te haya ayudado a comprender cómo declarar y utilizar constantes dentro de Go.
Existen algunos aspectos avanzados respecto al uso de constantes en Go, pero eso da para otra entrada adicional que de momento a corto plazo no abordaré.
Podrás encontrar el ejemplo completo de lo hablado en esta entrada, en mi repositorio de GitHub.
Happy Coding!