Est-il possible de déclarer plusieurs variables à la fois en utilisant Golang?
Par exemple, dans Python vous pouvez taper ceci:
a = b = c = 80
et toutes les valeurs seront 80.
Oui, vous pouvez:
var a, b, c string
a = "foo"
fmt.Println(a)
Vous pouvez faire quelque chose de similaire pour une affectation en ligne, mais pas aussi pratique:
a, b, c := 80, 80, 80
En termes de spécification de langage, cela est dû au fait que les variables sont définies avec:
VarDecl = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) .
VarSpec = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .
(De " Déclaration de variable ")
Liste d'identifiants pour un type, affectés à un expression ou ExpressionList .
const a, b, c = 3, 4, "foo" // a = 3, b = 4, c = "foo", untyped integer and string constants
const u, v float32 = 0, 3 // u = 0.0, v = 3.0
Oui, vous le pouvez et c'est légèrement plus nuancé qu'il n'y paraît.
Pour commencer, vous pouvez faire quelque chose d'aussi simple que:
var a, b, x, y int // declares four variables all of type int
Vous pouvez utiliser la même syntaxe dans les déclarations de paramètres de fonction:
func foo(a, b string) { // takes two string parameters a and b
...
}
Vient ensuite la syntaxe abrégée pour déclarer et affecter une variable en même temps.
x, y := "Hello", 10 // x is an instance of `string`, y is of type `int`
Un modèle souvent rencontré à Golang est:
result, err := some_api(...) // declares and sets `result` and `err`
if err != nil {
// ...
return err
}
result1, err := some_other_api(...) // declares and sets `result1`, reassigns `err`
if err != nil {
return err
}
Ainsi, vous pouvez affecter des variables déjà définies sur le côté gauche du :=
opérateur, tant qu’au moins une des variables affectées est nouvelle. Sinon, ce n'est pas bien formé. C'est pratique car cela nous permet de réutiliser la même variable d'erreur pour plusieurs appels d'API, au lieu d'avoir à en définir une nouvelle pour chaque appel d'API. Mais veillez à ne pas utiliser par inadvertance les éléments suivants:
result, err := some_api(...) // declares and sets `result` and `err`
if err != nil {
// ...
return err
}
if result1, err := some_other_api(...); err != nil { // result1, err are both created afresh,
// visible only in the scope of this block.
// this err shadows err from outer block
return err
}
Essayez ceci sur le terrain de jeu: https://play.golang.org/
package main
import "fmt"
func main() {
a, b := "a", "b"; //Declare And Assign
var c, d string; //Declare Only
fmt.Println(a,b);
fmt.Println(c,d);
}
Une autre façon de faire est comme ça
var (
a = 12
b = 3
enableFeatureA = false
foo = "bar"
myvar float64
anothervar float64 = 2.4
)
Travaille également pour const
const (
xconst = 5
boolconst = false
)