Go入門:文法のきほん
ゼロ値(Goならでは)
この回でやること
型ごとのゼロ値と、0だけでは入力済みか判断できない場面を確かめます。
- 読む 約 7 分
- 最後にクイズ 1 問
初期化しない変数にも値が入っている
在庫を数える変数を宣言し、値を指定しなかったとします。Go は宣言された型に応じた値を自動で入れます。これをゼロ値と呼びます。
Go
var count int
var name string
var sold boolこの3つは順に 0、空文字の ""、false です。var count int は、整数型の変数 count を作る書き方です。初期値を書く場所が空でも、後で値を使う前に初期化されます。
主な型のゼロ値
プレーンテキスト
int 0
float64 0
string ""
bool false数は0、文字列は空、真偽値は偽として始まります。float64 は小数を扱う数値型です。参照先を持つ型には nil というゼロ値もあります。Go のすべての型が数の0になるわけではありません。
合計を作るときは、この性質をそのまま使えます。次の例では prices を価格の並びとし、total が0から始まります。range は価格を順に取り出す書き方で、_ はここで使わない位置を受け取ります。total += price は、取り出した価格を total に足して代入する意味です。
Go
var total int
for _, price := range prices {
total += price
}価格が120円と80円なら、total は0、120、200と変わります。total = 0 を別に書く必要はありません。
書き忘れを見分けるには
ゼロ値は便利ですが、0が正しい値なのか、代入を忘れたのかを値だけで区別できません。商品価格が0円でもよい仕組みなら、var price int の0を見て「無料の商品」と決めつけると誤ります。
Go
var price int
fmt.Println(price) // 0 と表示される入力に価格があったかを知るには、値とは別に有無を記録するか、読み取り処理の結果とエラーを合わせて扱います。後の章で、値とエラーを一緒に返す方法を学びます。ゼロ値は初期値を省ける仕組みであり、入力済みである証拠ではありません。
例題で確かめる
集計表の var shipped int は、発送件数をまだ加えていない時点で0です。最初に3件、次に2件を加えると、0、3、5と変わり、結果は5件です。一方、注文画面の送料が0円と表示されたときは、無料配送か、送料をまだ読み取っていないかを0だけでは判断できません。件数の合計にはゼロ値を使い、入力済みの確認には別の情報を使います。