Go言語の変数宣言の整理
A variable declaration creates one or more variables, binds corresponding identifiers to them, and gives each a type and an initial value.
(変数宣言は1つ以上の変数を作成し、識別子を紐付け、それぞれに「型」と「初期値」を与える)
— The Go Programming Language Specification より
Go言語における変数は、どのような宣言方法であっても「型」と「値」の両方を必ず持つ。 一見すると様々な変数宣言の記法が存在するが、すべてはこの「変数には型と値が必要」という大原則を満たすために、「プログラマが明示するか、コンパイラに補わせるか」の違いでしかない。
型と値の両方を明示する(基本形)
Section titled “型と値の両方を明示する(基本形)”最も丁寧な書き方であり、変数に必要な「型」と「値」の両方をプログラマが明示する。
変数の宣言において、不足している情報が何もない状態である。
var name string = "Taro"この記述では、型(string)と値("Taro")の両方を明示的に指定している。
これがGo言語における変数宣言の最も基本となる形である。
しかし、毎回両方を書くのは冗長であるため、Go言語では状況に応じて片方を省略(コンパイラに推論・補完)させる記法が用意されている。
値の指定を省略する(ゼロ値)
Section titled “値の指定を省略する(ゼロ値)”「型」だけを指定して「値」の指定を省略した場合、コンパイラが自動的に初期値を補ってくれる。
あとから値を代入する場合など、宣言時に具体的な値が決まっていない場合に用いられる。
var name stringこの記述では、型(string)だけを指定し、初期値を省略している。
しかし「変数には値が必要」であるため、Go言語では自動的にその型のゼロ値(文字列なら ""、数値なら 0 など)が初期値として割り当てられる。
つまり、プログラマが値を書かなくても、コンパイラが裏で値を与えているのである。
型の指定を省略する(型推論)
Section titled “型の指定を省略する(型推論)”「値」だけを指定して「型」の指定を省略した場合、コンパイラが右辺の値から型を推論して補ってくれる。
初期値が明確に決まっている場合、記述を簡潔にするために用いられる。
型の省略には、var を使う方法と := を使う方法の2種類がある。
varを用いる場合
Section titled “varを用いる場合”値があるため、型名を書かなくてもコンパイラが自動的に型を決定する。
var name = "Taro"右辺の "Taro" という値から、コンパイラは name 変数の型を string であると推測する。
これにより、プログラマは型の記述を省略できる。
:=(ショート変数宣言)を用いる場合
Section titled “:=(ショート変数宣言)を用いる場合”var すらも省略し、さらに短く記述するための記法である。
name := "Taro"これも var で型を省略した場合と全く同じで、右辺の値("Taro")からコンパイラが型を推測する。
関数の中でのみ使用可能という制限はあるが、コードが最も簡潔になるため、Go言語で最も多用される記法である。
Go言語の変数宣言は、すべて「型と値の両方を決定する」ための手続きである。
変数宣言の記法は、プログラマが何を記述し、コンパイラに何を任せるかによって整理できる。
- 型と値の両方を書く:
var name string = "Taro"(すべてプログラマが決定) - 型だけを書く:
var name string(値はコンパイラがゼロ値を補う) - 値だけを書く:
var name = "Taro"またはname := "Taro"(型はコンパイラが値から推論する)
このように整理することで、Go言語の変数宣言のバリエーションは、単なる暗記ではなく論理的なルールとして理解することができる。
よくある質問
Section titled “よくある質問”- varと:=の使い分けの基準は何ですか?
関数内で初期値が決まっており、簡潔に書きたい場合は
:=(ショート変数宣言)を使用する。一方、パッケージレベルでの宣言、初期値を後で代入するためにゼロ値で初期化したい場合、または明示的に型を指定したい場合はvarを使用する。- 関数の中で、あえてvarを使った宣言をするのはどのような場合か?
関数内で宣言と同時に初期値を入れるなら
:=(ショート変数宣言)を使用するが、主に以下の2つのケースではあえてvarを使用する。- ゼロ値を使いたい(変数だけ用意したい)場合:後続の
if文やforループの中で値を代入することが決まっており、とりあえず初期状態(ゼロ値)で用意しておきたい場合。 - 型を明示的に指定したい場合:推論される型とは別の型で変数を作りたい場合(例:初期値が
0だが、型はintではなくfloat64にしたい場合など)。
このように、「とりあえず変数を用意した」「型を厳密に指定した」というプログラマの意図をコード上に明確にするために使い分ける。
- ゼロ値を使いたい(変数だけ用意したい)場合:後続の
他の記事を探す

