Variables, declaraciones y aclaraciones

Variables, declaraciones y aclaraciones

Go Series

·

3 min read

Dicen que si no es por la razón, es por la fuerza. Y durante mucho tiempo le hice el quite a Golang... hasta que llegó lo inevitable. Y aquí estamos, guardando apuntes de Go, que espero les sirvan de igual modo.

Diferencias entre = y :=

El símbolo = es la versión larga de declaración y asignación:

// Esto:
var number int 
number = 657
// Es lo mismo que:
var number int = 657
// Y lo mismo que:
var number = 657

La versión corta del código anterior es:

number := 657

El código anterior está declarando, inicializando e infiriendo un tipo de dato, en este caso int.

Reglas 🚓

No usar fuera de funcs

No se puede utilizar el símbolo := fuera de un método func, ya que cualquier declaración debe comenzar con una palabra reservada (keyword)

// file: main.go
permitido := false // error!
// Anteponer 'var' lo convierte en una declaración permitida
var permitido = true

func aquiSePuede(){
    sePuede := true
}

No usar dos veces seguidas

No se puede declarar una variable dos veces en el mismo ámbito (scope)

gemelos := 2
gemelos := 2 // error! no new variables on left side of :=

Esto no se puede, la primera instrucción declara la variable y la inicializa, no puedo volver a declararla como si no existiera.

Multi-variable y multi-declaración

Podemos declarar muchas variables y asignarles un valor en la misma sentencia.

AlturaPino, AlturaRoble, AlturaAcacia := 2.34, 3.24, 5.23
valorEUR, valorUSD, valorCLP := 780, 650, 1

Multi-declaración si una es nueva

Podemos utilizar el operador dos veces en multi-variables, sólo si una de ellas es nueva:

succ, err := funcion()
oper, err := funcion() // no falla, porque oper es nueva.
succ, res := funcion() // no falla, porque res es nueva.

Esto se puede porque no estás declarando ambas como nuevas variables en la segunda línea, sino que estás reasignando un valor a una variable e inicializando otra. En el ejemplo, en la segunda línea oper se está inicializando, pero err está cambiando su valor.

Se puede, pero no lo hagas

Puedes declarar una variable en un bloque nuevo incluso si ya fue declarada fuera de ese bloque.

var pleaseNo int = 23

func funcion(){
// aquí pleaseNo está dentro del scope de la función. 
    pleaseNo := 33 
    pleaseNo = 553
}

Lo mismo pasa con los scope en los if, for o switch:

pleaseNo := 23
if pleaseNo := funcion(); pleaseNo == 22 {
// pleaseNo tiene un valor de 22 aquí
}
// pero sigue teniendo un valor de 42 aquí

Enlaces