Go 速習チュートリアル

Go 言語の変数宣言

1. Goの変数型 (Go Variable Types)

変数(Variables)は、データを保存するためのコンテナです。 Goには、以下のような様々なタイプ(型)の変数が存在します。

  • int: 123 や -123 などの整数を保存します。
  • float32: 19.99 や -19.99 などの小数を持つ浮動小数点を保存します。
  • string: "Hello World" などのテキストを保存します。文字列(String)の値はダブルクォーテーションで囲みます。
  • bool: true または false の2つの状態を持つ値を保存します。

2. 変数の宣言(作成)

Goで変数を宣言するには、主に2つの方法があります。

2.1. varキーワードを使用する方法

var キーワードに続けて、変数名と型を指定します。

構文(Syntax)

var variablename type = value

       注意: 必ず「型(type)」か「値(value)」のどちらか一方(または両方)を指定する必要があります。

2.2. := 記号(短縮宣言)を使用する方法

:= 記号に続けて、変数の値を指定します。

構文(Syntax)

variablename := value

注意: この場合、変数の型は値からインファレンス(型推論)されます。つまり、コンパイラが値に基づいて変数の型を決定します。
注意::= を使用する場合、値を代入せずに宣言することはできません。

3. 初期値を持つ変数宣言

変数の値が最初からわかっている場合は、1行で宣言と代入を行うことができます。

コード例:

package main
import ("fmt")

func main() {
  var student1 string = "ジョン" // 型は string
  var student2 = "ジェーン"     // 型は推論される
  x := 2                       // 型は推論される

  fmt.Println(student1)
  fmt.Println(student2)
  fmt.Println(x)
}

       注意:student2x の型は、それぞれの値から型推論されます。

4. 初期値を持たない変数宣言

Goでは、すべての変数が初期化されます。そのため、初期値を指定せずに変数を宣言した場合、その型のデフォルト値(ゼロ値)が設定されます。

コード例:

package main
import ("fmt")

func main() {
  var a string
  var b int
  var c bool

  fmt.Println(a)
  fmt.Println(b)
  fmt.Println(c)
}

解説:
この例には3つの変数があります。

  • a
  • b
  • c

これらの変数は宣言されていますが、初期値は代入されていません。コードを実行すると、それぞれの型のデフォルト値が表示されます。

  • a は "" (空の文字列)
  • b は 0
  • c は false

5. 宣言後の値の代入

変数を宣言した後に値を代入することも可能です。これは、初期段階で値が決まっていない場合に便利です。

コード例:

package main
import ("fmt")

func main() {
  var student1 string
  student1 = "ジョン"
  fmt.Println(student1)
}

       注意::= を使用して、値を代入せずに宣言することはできません。

6. var と := の違い

var:= には、いくつかの細かな違いがあります。

特徴var:=
使用範囲関数の内部および外部で使用可能関数の内部のみで使用可能
宣言と代入宣言と代入を別々に行うことができる宣言と代入を別々に行うことはできない(同じ行で行う必要がある)

7. 変数宣言の具体例

7.1. 関数外での var キーワードの使用

以下の例は、関数の外で var キーワードを使用して変数を宣言する方法を示しています。

コード例:

package main
import ("fmt")

var a int
var b int = 2
var c = 3

func main() {
  a = 1
  fmt.Println(a)
  fmt.Println(b)
  fmt.Println(c)
}

7.2. 関数外での短縮宣言(エラー例)

:= は関数の外で使用するとエラーになります。

コード例:

package main
import ("fmt")

a := 1 // 関数外での短縮宣言は不可

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

実行結果:

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