Go言語(golang)の変数

※当サイトではアフィリエイト広告を利用しています

目次

はじめに

Go言語の変数について説明します。

Go言語の変数宣言

Go言語では、変数を宣言する際にはvarキーワードを使用します。以下は、変数の宣言方法の例です。

var foo int // int型の変数fooを宣言
foo = 123   // fooに123を代入

変数の宣言と同時に初期化することもできます。

var bar string = "hello" // string型の変数barを宣言して、"hello"で初期化

また、型を明示しなくても、初期化式からGo言語は変数の型を推論できます。

var baz = true // bool型の変数bazを宣言して、trueで初期化

複数の変数を宣言することもできます。

var x, y int = 1, 2 // int型の変数x, yを宣言して、それぞれ1, 2で初期化

さらに、変数の型宣言を省略することもできます。この場合、初期化式から変数の型が推論されます。

foo := 123    // int型の変数fooを宣言して、123で初期化
bar := "hello" // string型の変数barを宣言して、"hello"で初期化

複数の変数を省略形式で宣言することもできます。

x, y := 1, 2 // int型の変数x, yを宣言して、それぞれ1, 2で初期化

Go言語では、未初期化の変数はその型のゼロ値で初期化されます。例えば、int型の未初期化変数は0で初期化されます。

var i int // int型の変数iを宣言して、初期化しない
fmt.Println(i) // 出力: 0

var s string // string型の変数sを宣言して、初期化しない
fmt.Println(s) // 出力: "" 空文字

また、変数を宣言する際には、型宣言の代わりに型推論を使用することができます。

i := 123    // int型の変数iを宣言して、123で初期化
s := "hello" // string型の変数sを宣言して、"hello"で初期化

定数もconstを使用して宣言することができます。定数は宣言と同時に初期化しなければなりません。

const pi = 3.14159 // float64型の定数piを宣言して、3.14159で初期化

Go言語の変数同士の代入や演算

Go言語では、複合代入演算子を使用して、変数に対して複数の演算を一度に実行することができます。以下は、複合代入演算子の例です。

var i int
i += 10   // i = i + 10
i -= 5    // i = i - 5
i *= 2    // i = i * 2
i /= 3    // i = i / 3
i %= 2    // i = i % 2

上記の例では、int型の変数iを宣言し、その後に複合代入演算子を使用して、iに10を加えたり、5を引いたり、2を掛けたり、3で割ったり、2で割った余りを求めたりしています。

インクリメント・デクリメント演算子

インクリメント・デクリメント演算子を使用して、変数を1つずつ増減させることができます。以下は、インクリメント・デクリメント演算子の例です。

var i int = 10
i++ // i = i + 1
i-- // i = i - 1

int型の変数iを宣言し、その後にインクリメント・デクリメント演算子を使用して、iを1つずつ増減させています。

Go言語の変数のスコープ

Go言語では、変数にはスコープと呼ばれる有効範囲があります。スコープによって、変数がどの範囲内で有効かが決まります。変数のスコープは、変数が宣言された場所によって決まります。

Go言語では、変数のスコープには以下の4つがあります。

  • ブロックスコープ
  • 関数スコープ
  • パッケージスコープ
  • グローバルスコープ

ブロックスコープ

ブロックスコープとは、中括弧 {} で囲まれた範囲のことを指します。ブロックスコープ内で宣言された変数は、そのブロック内でのみ有効です。ブロックを抜けると、その変数は破棄されます。

例えば、以下のコードでは、if文のブロック内で変数iを宣言しています。そのため、変数iはif文のブロック内でのみ有効であり、if文の外で使用することはできません。

if x := 10; x > 5 {
    var i int = 20
    fmt.Println(i) // => 20
}
fmt.Println(i) // コンパイルエラー。変数iはif文のブロック外で未定義

関数スコープ

関数スコープとは、関数内で宣言された変数が、その関数内でのみ有効であることを指します。関数の引数も関数スコープ内で宣言されたものとして扱われます。関数を抜けると、関数スコープ内で宣言された変数は破棄されます。

例えば、以下のコードでは、関数foo内で変数iを宣言しています。そのため、変数iはfoo関数内でのみ有効であり、foo関数の外で使用することはできません。

func foo() {
    var i int = 10
    fmt.Println(i) // => 10
}
foo()
fmt.Println(i) // コンパイルエラー。変数iはfoo関数の外で未定義

パッケージスコープ

パッケージスコープとは、パッケージ内で宣言された変数が、そのパッケージ内のすべてのファイルで参照可能であることを指します。ただし、変数名の先頭が大文字の場合に限り、他のパッケージからも参照可能となります。

// fooパッケージの変数iは、fooパッケージ内のすべてのファイルで参照可能
var i int = 10

func Foo() {
    fmt.Println(i) // => 10
}

// 変数jは、他のパッケージからは参照できない
var j int = 20

// 変数Jは、他のパッケージからも参照可能
var J int = 30

この例では、変数iはfooパッケージ内のすべてのファイルで参照可能であり、Foo関数でも参照できます。一方、変数jはfooパッケージ内でしか参照できず、他のパッケージからは参照できません。変数Jは、他のパッケージからも参照可能であり、変数名の先頭が大文字であるため、他のパッケージからも参照できます。

グローバルスコープ

グローバルスコープとは、パッケージスコープと同様に、パッケージ内で宣言された変数が参照可能であることを指します。ただし、グローバルスコープでは、変数名の先頭が大文字であっても、他のパッケージからは参照できません。

例えば、以下のようにグローバル変数を定義することができます。

// 変数iは、パッケージスコープと同様にパッケージ内のすべてのファイルで参照可能
var i int = 10

func Foo() {
    fmt.Println(i) // => 10
}

ただし、変数iが定義されたパッケージから他のパッケージからは参照できません。変数名の先頭が大文字であっても、グローバルスコープでの参照はできません。

以上が、Go言語における変数の説明でした。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

テック企業でプレイングマネージャーをしている Jun です。プログラミングの基礎をはじめ、組織やマネジメントについてブログを書いています。ハードスキル、ソフトスキルどちらも磨きたい方を対象にしています。一緒に学んで人生を楽しくしていきましょう!

目次