Golang: 変数の再宣言
結論
":="を使用した変数宣言
1つ以上の新しい変数("_"は新しい変数とは見做されない)
元の型と同じ型
という3つの条件を満たす場合、同じブロックで、変数の再宣言を行うことができる。
再宣言によって新しい変数が導入されるのではなく、元の変数に新しい値が代入されるだけである。
例
package main
import "fmt"
func func_int_int() (int, int) {
return 1, 2
}
func main() {
v1 := 0
fmt.Println(&v1)
// 3つの条件すべてを満たすため、v1は再宣言を行える
// 1. := による変数宣言
// 2. 新しい変数v2
// 3. v1は元の変数と同じint型
v1, v2 := func_int_int()
fmt.Println(&v1)
fmt.Println(v1, v2)
}
$ go run main.go
0xc00011a040
0xc00011a040
1 2
変数v1に対する再宣言前後で、v1のアドレスが変わっていないことが確認できた。このことから、変数v1が新たに割り当てられたのではなく、元の変数v1に値が代入されただけであることが確認できた。
参照