Golangを使用して複数の変数を一度に宣言することは可能ですか?
たとえば、Pythonでは、次のように入力できます。
a = b = c = 80
すべての値は80になります。
はい、できます:
var a, b, c string
a = "foo"
fmt.Println(a)
インライン割り当てでも同様のことができますが、それほど便利ではありません。
a, b, c := 80, 80, 80
言語仕様に関しては、変数が次のもので定義されているためです。
VarDecl = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) .
VarSpec = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .
(「 変数宣言 」から)
expression または ExpressionList に割り当てられた、1つのタイプの識別子のリスト。
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
はい、できます。見た目よりも少し微妙です。
はじめに、次のような単純なことができます。
var a, b, x, y int // declares four variables all of type int
関数のパラメーター宣言で同じ構文を使用できます。
func foo(a, b string) { // takes two string parameters a and b
...
}
次に、変数の宣言と割り当てを同時に行うための短縮構文があります。
x, y := "Hello", 10 // x is an instance of `string`, y is of type `int`
Golangでよく遭遇するパターンは次のとおりです。
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
}
したがって、割り当てられている変数の少なくとも1つが新しい限り、:=
演算子の左側で定義済みの変数に割り当てることができます。それ以外の場合、整形式ではありません。 API呼び出しごとに新しいエラー変数を定義する代わりに、複数のAPI呼び出しに同じエラー変数を再利用できるため、これは素晴らしいです。ただし、次のものを誤って使用しないように注意してください。
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
}
Go-playgroundでこれを試してください: 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);
}
これを行う別の方法はこのようなものです
var (
a = 12
b = 3
enableFeatureA = false
foo = "bar"
myvar float64
anothervar float64 = 2.4
)
Constでも機能します
const (
xconst = 5
boolconst = false
)