Declaración de tipo por inferencia
Dado que Go puede determinar el tipo de una variable por su valor inicial, ¿podemos simplificar el proceso de declaración de tipo eliminando el paso de especificar explícitamente el tipo?
package main
import "fmt"
func main() {
// var a int = 1
var a = 1 // Type is inferred
fmt.Println(a)
}
Ahora ni siquiera necesitas usar la palabra clave var
para definir una variable.
Esta forma de declarar e inicializar una variable también se puede combinar con el método de declaración por lotes:
a, b, c := 0
// Declare variables a, b, c as integers and assign an initial value of 0
a, b, c := 0, "", true
// Declare variables a, b, c as integer, string, and boolean, respectively
La declaración corta es muy conveniente, pero ten cuidado de que :=
no es una operación de asignación. Es una forma de declarar variables y es exclusiva de Go, utilizada para declarar e inicializar variables locales dentro de una función. El tipo de la variable se inferirá automáticamente en función de la expresión.
A veces escribimos el siguiente código:
func main() {
a := 1
println(a)
a := 2
println(a)
}
El compilador te dirá que hay un error en el código porque la variable a
ha sido redeclarada. Sin embargo, si se escribe de la siguiente manera:
func main() {
a := 1
if true {
a := 2
println(a) // Output: 2
}
println(a) // Output: 1
}
Hay tal salida porque la a
con valor 1
de arriba y la a
con valor 2
de abajo no están en el mismo ámbito de variable (dentro de las mismas llaves), por lo que el compilador las trata como dos variables diferentes.
El compilador no te señalará el error, pero habrá una salida inesperada.
En Go, se establece que:
Cada declaración fuera de una función debe comenzar con una palabra clave (var
, func
, etc.).
Por lo tanto, la declaración corta de variables solo se puede utilizar para declarar variables locales y no se puede utilizar para declarar variables globales.
Entonces, ¿qué es una variable global y qué es una variable local?
Esto involucra el concepto de tiempo de vida de las variables, que se explicará en la siguiente sección.