Golang: 変数の再宣言

結論

  1. ":="を使用した変数宣言

  2. 1つ以上の新しい変数("_"は新しい変数とは見做されない)

  3. 元の型と同じ型

という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に値が代入されただけであることが確認できた。

参照


いいなと思ったら応援しよう!