Déclaration de type par inférence
Étant donné que Go peut déterminer le type d'une variable à partir de sa valeur initiale, pouvons-nous simplifier le processus de déclaration de type en éliminant l'étape de spécification explicite du type?
package main
import "fmt"
func main() {
// var a int = 1
var a = 1 // Le type est inféré
fmt.Println(a)
}
Maintenant, vous n'avez même pas besoin d'utiliser le mot clé var
pour définir une variable.
Cette façon de déclarer et d'initialiser une variable peut également être combinée avec la méthode de déclaration par lots :
a, b, c := 0
// Déclare les variables a, b, c comme des entiers et assigne une valeur initiale de 0
a, b, c := 0, "", true
// Déclare les variables a, b, c respectivement comme entier, chaîne de caractères et booléen
La déclaration courte est très pratique, mais attention, :=
n'est pas une opération d'affectation. C'est une façon de déclarer des variables et est propre à Go, utilisée pour déclarer et initialiser des variables locales à l'intérieur d'une fonction. Le type de la variable sera automatiquement inféré à partir de l'expression.
Parfois, nous écrivons le code suivant :
func main() {
a := 1
println(a)
a := 2
println(a)
}
Le compilateur vous indiquera qu'il y a une erreur dans le code car la variable a
a été redéclarée. Cependant, si vous l'écrivez de la manière suivante :
func main() {
a := 1
if true {
a := 2
println(a) // Sortie : 2
}
println(a) // Sortie : 1
}
Il y a une telle sortie car l'a
de valeur 1
ci-dessus et l'a
de valeur 2
ci-dessous ne sont pas dans la même portée de variable (à l'intérieur des mêmes accolades), donc le compilateur les considère comme deux variables différentes.
Le compilateur ne vous indiquera pas votre erreur, mais il y aura des sorties inattendues.
En Go, il est stipulé que :
Chaque instruction en dehors d'une fonction doit commencer par un mot clé (var
, func
, etc.).
Par conséquent, la déclaration courte de variable ne peut être utilisée que pour déclarer des variables locales et ne peut pas être utilisée pour déclarer des variables globales.
Alors, qu'est-ce qu'une variable globale et qu'est-ce qu'une variable locale?
Cela implique le concept de durée de vie des variables, qui sera expliqué dans la section suivante.