【Go言語マスターへの道】第2章 その1 変数の宣言

【Go言語】 変数の宣言

「Go言語マスターへの道」 第2章として今回は、Go言語における、変数の宣言方法やルールについて解説していきます。

前回の記事

【Go言語マスターへの道】第1章 Go言語の概要

環境: go version go1.21.3

変数の宣言

varを使用した変数宣言方法

最も基本的な変数の定義方法としてvar (variable) キーワードを使用する方法が存在します。

var i int = 1

こちらは数値型で値が 1 の変数 i を定義しており、
var 変数名  = 変数の値 という意味になっています。

(型については次回の章にて詳しく説明します)

また、varを使った場合、値を代入せずに変数の宣言のみを行うことが可能となり、
以下の場合、変数 i の値はint型の初期値である0が代入されています。

var i int
多重代入

以下のように、同じ型の複数の変数を一度にまとめて宣言することもできます。

var i, j, k int = 1, 2, 3

int型(数値型)の変数、i,j,kを一度に宣言し、それぞれ値に1,2,3を多重代入している。

型の記述を省略して宣言

変数を定義する際に以下のように型を省略して記載することも可能です。

var i = 1

この場合、イコールの後ろに記載した内容から自動的に型の予測が行われます。
それによって、変数 i はイコールの後ろの値 1 から数値型(int)と判定されて定義されます。

(型が予測されて自動的に決まることを型推論と呼ばれています)

こちらの場合、異なる型の変数を多重代入できます。

var i, j = 1, "A"

(変数iに数値の1、jには文字列のAを代入)

varによる宣言リスト

複数の変数宣言をひとまとめにする、宣言リストという方法が存在します。

var (
	i    int    = 1
	j, s        = 2, "A"
	ss   string = "b"
	t           = true
	f    bool   = false
)

上記は型を明示している宣言とそうでない宣言、及び、多重代入の宣言を括弧でひとまとめにしています。

:= を使用する(varを省略)

varの代わりに := (コロン、イコール)を使用して短く記述して宣言する方法もあります。

i := 1

ショートと呼ばれるこちらの書き方も、イコールの後ろの値から自動的に型推論が行われるようになっています。

Goのプログラムではよく見られるこちらの宣言方法では、宣言と同時に値を必ず代入する必要がありますので、
変数を明示的にゼロ値で初期化する必要がある場合は前述のvarによる宣言方法の使用が推奨されています。

また、浮動小数点数型で精度を明示的に指定したい場合もvarによる宣言でfloat32かfloat64の型指定を行います。

:=での注意点
:=での変数宣言は関数の内部でしか宣言することができず、varを記載した場合のように関数の外側で定義することはできません。

NG(関数の外側で:=を使用して定義)

package main

import "fmt"

i := 1

func main() {
	fmt.Println(i)
}

コンパイルエラーが発生

./main.go:5:1: syntax error: non-declaration statement outside function body

 

OK(関数の内側で:=を使用)

package main

import "fmt"

func main() {
	i := 1
	fmt.Println(i)
}

 

OK
(varを省略しなければ、関数の内外両方から使用できる)

package main

import "fmt"

var i = 1

func main() {
	var j = 2
	fmt.Println(i)
	fmt.Println(j)
}

変数名のルールと注意事項

Go言語で宣言する変数名に使用できる文字は以下のみという決まりがあります。

  • アルファベット
  • 数字
  • _(アンダースコア)

アルファベットは大文字と小文字で区別され、_(アンダースコア)以外の記号は使用することができません。

また、変数名を数字から始まることもできません。

OK

func main() {
	var i, I int = 1, 10
	var i0 int = 0
	var i1_ int = 1
	var _2i int = 2

	fmt.Println(i)
	fmt.Println(I)
	fmt.Println(i0)
	fmt.Println(i1_)
	fmt.Println(_2i)
}

(出力結果)

1
10
0
1
2

 

NG

以下は変数名が不正な内容となっていますので、コンパイルエラーとなります。

func main() {
	// 数字から始められません
	var 0i int = 0
	
	// $記号は使えません
	var i$ string = "$"
	
	fmt.Println(0i)
	fmt.Println(i$)
}

 

次回は変数の基本型について解説します。

Follow me!

【Go言語マスターへの道】第2章 その1 変数の宣言” に対して1件のコメントがあります。

コメントは受け付けていません。