Goでは、変数宣言のところで少し扱いましたが、変数を宣言しても、値で初期化しない時があります。
これは「ゼロ値」と呼ばれるデフォルトの値です。
ここではそのゼロ値について、もう一度見ておくことにします。
「ゼロ値」というデフォルト値
変数を宣言しても、値で初期化しない時のデフォルト値を「ゼロ値」だと書きましたが、言い方を変えれば、Goの変数は必ず初期化されるということになります。
次のように、値なしで変数を宣言してみます。
package main
import "fmt"
var s string
var i int
var f64 float64
var f bool
func main() {
fmt.Printf("%T, %v\n", s, s)
fmt.Println("string型のゼロ値は", s, "です。")
fmt.Printf("%T, %v\n", i, i)
fmt.Println("int型のゼロ値は", i, "です。")
fmt.Printf("%T, %v\n", f64, f64)
fmt.Println("floar64型のゼロ値は", f64, "です。")
fmt.Printf("%T, %v\n", f, f)
fmt.Println("bool型のゼロ値は", f, "です。")
s = "文字列の代入"
fmt.Println(s)
}
文字列と数値、真偽値として、値なしで変数を宣言しています。
実行結果は以下のようになります。
string,
string型のゼロ値は です。
int, 0
int型のゼロ値は 0 です。
float64, 0
floar64型のゼロ値は 0 です。
bool, false
bool型のゼロ値は false です。
文字列の代入
このように、string型の場合は””で、int型などの場合は0で、bool型はfalseで初期化されます。これがゼロ値です。
最後の変数sのように文字列を代入することで、値を出力することができます。
Pythonコードでは…
Pythonでは値を入れずに変数を宣言してデフォルト値としてゼロ値をとるようなものはありません。何らかの値を入れて初期化しないと出力することはできません。
ゼロ値というデフォルト値とは違いますが、次のように0などを代入して初期化すると、Pythonでは次のように書くことができます。
s: str
i: int
f: float
b: bool
def main():
s = ""
i = 0
f = 0
b = False
print(type(s), s)
print(type(i), i)
print(type(f), f)
print(type(b), b)
if __name__ == "__main__":
main()
Goのゼロ値のように、””、0、Falseを入れて変数を初期化しました。
実行結果は以下のようになります。
<class 'str'>
<class 'int'> 0
<class 'int'> 0
<class 'bool'> False
最後に
Go言語で変数を宣言する時に、値を代入して初期化しない場合、ゼロ値というデフォルト値が適用されます。
それぞれの方にこのゼロ値があるために、Goの変数は必ず初期化されるということになります。