変数の宣言と使用

完了

このモジュールでは、まず、Go で変数を宣言して使用する方法を見ていきます。 変数を宣言するには、さまざまな方法があります。 それぞれを確認し、ニーズやスタイルに最適なものを選びます。 変数の基本的な概念を解説しながら、他のプログラミング言語では通常見られない Go 固有の事情について述べます。

このセクションでは、Visual Studio Code または Go Playground で実行できるコード スニペットを示しています。

変数の宣言

変数を宣言するには、var キーワードを使用する必要があります。

var firstName string

前のステートメントでは、string 型の firstName という名前の変数を宣言しています。 (データ型については、後のセクションで説明します。)この例は、変数を宣言する最も基本的な方法を示しています。 別の変数を宣言する場合は、同様のステートメントを前のものに追加するだけです。 同じ型であれば、複数の変数を 1 行で宣言できます。

var firstName, lastName string

変数名の後ろにコンマ (,) を追加して、別の変数を宣言することを示します。 この場合、前のステートメントでは、string 型の 2 つの変数 firstNamelastName を宣言しています。 int 型の 3 番目の変数を追加する場合、コードは次のようになります。

var firstName, lastName string
var age int

前のステートメントは、次のように、var キーワードの後にかっこを使用して変数宣言専用ブロックのように記述することもできます。

var (
    firstName, lastName string
    age int
)

変数の初期化

この時点では変数を宣言しただけですが、初期値が必要な場合もあります。 Go では、さまざまな方法で変数を初期化できます。 たとえば、前と同じ例の続きとして、次のコードを使用して各変数を初期化できます。

var (
    firstName string = "John"
    lastName  string = "Doe"
    age       int    = 32
)

変数を初期化する場合、値を指定して変数を初期化するときに Go によって型が推定されるため、その型を指定する必要はありません。 たとえば、次のように変数を宣言して初期化できます。

var (
    firstName = "John"
    lastName  = "Doe"
    age       = 32
)

Go により、firstName および lastName 変数は string 型、age 変数は int 型と推定されます。

変数を初期化するさまざまな方法

Go では、複数の変数を 1 行で宣言および初期化できます。 次のように、変数名をコンマで区切り、値についても (同じ順序で) 同じようにします。

var (
    firstName, lastName, age = "John", "Doe", 32
)

変数を宣言して初期化するもう 1 つの方法があります。 これは、Go で最も一般的な方法です。 これまで使用してきたのと同じ例は、次のようになります。

package main

import "fmt"

func main() {
    firstName, lastName := "John", "Doe"
    age := 32
    fmt.Println(firstName, lastName, age)
}

Note

import "fmt" ステートメントに着目してください。 import キーワードは、パッケージの内容をスコープに取り込むために使用しています。 "fmt" パッケージをインポートするので、このコードで Println メソッドを使用できます。 このキーワードについては、後のレッスンで詳しく説明します。

前のコードを実行して、このように変数を宣言および初期化できることを確認してください。

ここでは、変数名定義の直後にコロンと等号 (:=)、さらに対応する値を含める必要があることに注意してください。 コロンと等号を使用する場合、宣言する変数は新しいものである必要があります。 コロンと等号を使用し、変数が宣言済みであった場合、プログラムはコンパイルされません。 age を定数として追加します (次のセクションを参照してください)。ただし、コロンと等号 (:=) を使って試してみてください。

最後に、コロンと等号は関数の中でしか使用できません。 関数の外で変数を宣言する場合は、var キーワードを使用して行う必要があります。 関数に詳しくなくても心配しないでください。 関数については、後のレッスンで説明します。

定数を宣言する

定数と呼ばれる静的な値がコードで必要になる場合があります。 Go では定数の使用がサポートされています。 宣言するためのキーワードは const です。

たとえば、次のように定数を宣言できます。

const HTTPStatusOK = 200

変数と同様に、定数の型は、それに割り当てられた値から推定されます。 Go では、定数名は通常、MixedCased のような形式またはすべて大文字で記述します。

1 つのブロックで複数の定数を宣言する必要がある場合は、次のようにします。

const (
    StatusOK              = 0
    StatusConnectionReset = 1
    StatusOtherError      = 2
)

Note

定数に関連して、Go には iota と呼ばれる興味深い概念がありますが、このモジュールでは扱いません。 詳しくは GitHub の Go wiki をご覧ください。 iota は、値が連続した定数の定義を簡略化するために Go で使用するキーワードであるとだけ覚えておいてください。

定数と変数には共通点もありますが、いくつかの重要な違いがあります。 たとえば、定数を使用せずに定数を宣言でき、その場合にエラー メッセージは表示されません。 コロンと等号を使用して定数を宣言することはできません。 Go ではエラーになります。

使用しない変数を宣言すると Go のエラーが出る

留意すべき基本事項として、Go では、 変数を宣言してそれを使用しなかった場合、他のプログラミング言語のように警告が出るのではなく、エラーになります。

たとえば、前の例の 1 つに戻って、fmt.Println の呼び出しを削除してみましょう。

func main() {
    firstName, lastName := "John", "Doe"
    age := 32
}

Visual Studio Code または Go Playground でこのコードを実行すると、変数を宣言している行でエラーが出るのを確認できます。 エラー メッセージは次のようになります。

./main.go:4:2: firstName declared but not used
./main.go:4:13: lastName declared but not used
./main.go:5:2: age declared but not used

Go で宣言するすべての変数は、どこかで使用しなければならないと覚えておいてください。