Variable declarationsは、変数が宣言されていることを明確にします。 var
キーワードが必要とされ、それが短く、行われているものを表現する(コメントを除くファイル・レベルのすべてでは、キーワード、例えばpackage
、import
、const
、type
、var
、func
で開始することがあります)。他のブロックと同じように、変数の宣言は次のように分類することができます。
var (
count int
sum float64
)
あなたはShort variable declarationsでそれを行うことはできません。また、初期値を指定せずに変数宣言を使用することもできます。この場合、各変数の型の値はゼロになります。 Short変数の宣言ではこれが許されません。初期値を指定する必要があります。
Goの指針設計の原則の1つは、構文をきれいにすることでした。多くのステートメントは、for
、if
、switch
などステートメント本体でのみ使用可能なローカル変数を宣言することができますが、便利です。構文をより洗練されたものにするために、ショート変数宣言は彼らが何をしているのかは分かりません。
for idx, value := range array {
// Do something with index and value
}
if num := runtime.NumCPU(); num > 1 {
fmt.Println("Multicore CPU, cores:", num)
}
もう一つの違い:再宣言
は、言語仕様から引用:通常の変数宣言とは異なり
、短い変数宣言は以前と同じで、彼らが最初に宣言された提供の変数を再宣言します同じタイプのブロックであり、非ブランク変数の少なくとも1つは新しいものです。結果として、再宣言は複数変数の短い宣言でしか現れません。再宣言は新しい変数を導入しません。オリジナルに新しい値を割り当てます。
これも便利です。最も可能性が高いだけ最後の関数呼び出し中にエラーがあったかどうかを確認するためにそれを必要とするので、あなたが適切なエラー処理をしたいと仮定し、あなたがerr
変数を再利用することができます
var name = "myfile.txt"
fi, err := os.Stat(name) // fi and err both first declared
if err != nil {
log.Fatal(err)
}
fmt.Println(name, fi.Size(), "bytes")
data, err := ioutil.ReadFile(name) // data is new but err already exists
// so just a new value is assigned to err
if err != nil {
log.Fatal(err)
}
// Do something with data
あまりにも速く、より詳細な私より。いい答え。 +1 –
あなたの答えをありがとう、なぜ彼らは関数スコープの外で ':='形式を使うのが好きではないのですか?私はそれが有害かもしれないことがわかりません。 – armnotstrong
@armnotstrongファイルレベルでは、すべてのコメント(コメントは除外されています)はキーワードで始まる必要があります。 'package'、' import'、 'const'、' type''var'、 'func'です。 – icza