こんにちは、かつコーチです。
Goを書き始めると、すぐにvarと:=という2種類の変数宣言に出会います。
「どっちを使えばいいの?」と迷う方は多いのではないでしょうか。
この記事では、基本データ型とあわせて、2つの宣言方法の違いと使い分けを解説します。
基本データ型とは?
代表的なデータ型
Goには、値の種類ごとにデータ型が用意されています。
データ型とは、その変数がどんな種類の値(数値・文字列など)を扱うかを表す分類のことです。
初心者がまず覚えておきたい代表的な型は以下の4つです。
int: 整数(1、-5、100など)string: 文字列(”こんにちは”など)bool: 真偽値(trueまたはfalse)float64: 小数(3.14など)
なぜ型を意識する必要があるのか
Goは静的型付け言語です。
静的型付け言語とは、変数の型がコンパイル時(実行前)に決まっていて、あとから変更できない言語のことです。
PythonのようにゆるくOKな言語と違い、Goではint型の変数に文字列を代入しようとするとコンパイルエラーになります。
一見厳しく感じますが、実行前にミスに気づけるという大きなメリットがあります。
基本の書き方
手順1: varで宣言する
まずはvarを使った基本の宣言方法です。
package main
import "fmt"
func main() {
var name string = "かつコーチ"
var age int = 30
fmt.Println(name, age)
}
var 変数名 型 = 値という形式で書きます。
型を省略して、値から自動で型を推論させることもできます。
var name = "かつコーチ"
手順2: :=(短縮変数宣言)で宣言する
Goには、varを省略できる短縮変数宣言という書き方もあります。
package main
import "fmt"
func main() {
name := "かつコーチ"
age := 30
fmt.Println(name, age)
}
:=を使うと、型を書かなくても値から自動的に型が決まります。
関数の中では、こちらの書き方が使われる場面が多いです。
varと:=の使い分け
基本的な使い分けの目安は以下の通りです。
- 関数の中で気軽に変数を作りたい →
:= - 関数の外(パッケージレベル)で変数を宣言したい →
var - 型を明示したい、または値を後から代入したい →
var
:=は関数の中でしか使えないという制約がある点に注意してください。
つまずきやすい設定・注意点
:=は関数の外で使えない
筆者が初心者だった頃、varばかり書くのが面倒に感じて、パッケージレベルの変数にも:=を使おうとしたことがあります。
❌Before
package main
import "fmt"
appName := "MyApp"
func main() {
fmt.Println(appName)
}
これを実行すると、以下のようなコンパイルエラーが出ます。
syntax error: non-declaration statement outside function body
「関数の外では宣言以外の文が書けない」という意味のエラーですが、初めて見たときは何を言われているのか分かりませんでした。
原因は、:=が関数の中でしか使えない構文だったことです。
✅After
package main
import "fmt"
var appName = "MyApp"
func main() {
fmt.Println(appName)
}
パッケージレベルの変数は、varを使えば問題なく宣言できます。
このエラーに出会って以来、「:=は関数の中だけ」というルールをしっかり覚えました。
ゼロ値の概念
値を指定しないとどうなるか
Goでは、変数を宣言しても値を代入しなければ、型ごとに決まった初期値が自動で入ります。
これをゼロ値と呼びます。
package main
import "fmt"
func main() {
var count int
var message string
var isActive bool
fmt.Println(count, message, isActive)
}
これを実行すると、0 (空文字列) falseが表示されます。intのゼロ値は0、stringのゼロ値は空文字列、boolのゼロ値はfalseです。
他の言語で見られる「未定義」や「null」のようなあいまいな状態がなく、常に決まった値が入るのがGoらしいところです。
応用・一歩先の使い方
複数の変数をまとめて宣言することもできます。
var (
name string = "かつコーチ"
age int = 30
)
x, y := 1, 2
複数行に分けて書くよりすっきりするので、変数が増えてきたら活用してみてください。
慣れてきたら、定数を表すconstにも挑戦してみると理解が深まります。
まとめ
この記事のポイント
- Goの基本データ型は
int、string、bool、float64など varは型を明示でき、関数の外でも使える:=は関数の中限定だが、型推論があり手軽に書ける- 値を代入しない変数には型ごとのゼロ値が自動で入る
次に読むべき記事
変数の扱い方がわかったら、次は条件分岐を学びましょう。
「if・switchで条件分岐する」で、Goの制御構文を解説しています。