LoginSignup
29
29

More than 5 years have passed since last update.

省略形式での変数再宣言が許される場合

Posted at

Go では変数は宣言されていないといけません。

var i int
i = 10

関数の中などの条件が揃う場合は、省略形式で型推論による宣言ができます。

i := 10 // i は int として宣言され代入される

そして、同じ変数の宣言は同じブロックでは一度しかできません。

var i int
// snip
var i int // i redeclared in this block

省略形式も同じ(がエラーは違う)

var i int
i := 10 // no new variables on left side of :=

しかし、省略形式の時は宣言する変数のうち少なくともひとつがブランク変数(_)ではない、
新しい変数であれば、他は再宣言ではなく単なる代入として扱えます。

var i int
i, j := 10, 20

最初なんでこれが動くのか謎だったんですが、ちゃんとドキュメントにありました。
http://golang.org/ref/spec#Short_variable_declarations
http://golang.jp/go_spec#Short_variable_declarations

こが使える場面なんですが、自分が見つけたのは以下のような場合でした。
すでに err のような取回す変数が宣言されていて、それ以外の値も含めた多値を返す関数を呼ぶとき。

var err error
i, err := hoge()

もし err 側で再宣言とみなされると、 i にあたるものはいちいち宣言しないといけない。
これが err の方は単なる代入になり、いちいち i にあたるものを宣言しないでいい。

29
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
29