変数を宣言しよう
変数は、データを保存しておくための仕組みです。var を使った変数の宣言と、値の代入・参照の方法を学びます。
変数とは
変数とは、データを入れておく「箱」のようなものです。箱に名前をつけて、その中にデータを保存できます。
package main
import "fmt"
func main() {
var name string = "Go"
fmt.Println(name) // => Go
}
上のコードでは、name という名前の箱を作り、その中に "Go" という文字列を入れています。fmt.Println(name) で箱の中身を出力すると、Go と出力されます。
var で変数を宣言する
Go では、変数を使う前に「この名前の変数を使います」と宣言する必要があります。変数の宣言には var キーワードを使います。
var 変数名 型 = 値
例えば、文字列を入れる変数を作るには次のように書きます。
package main
import "fmt"
func main() {
var message string = "Hello"
fmt.Println(message) // => Hello
}
var は「変数を宣言する」というキーワード、message は変数名、string は変数に入れるデータの種類(型)、"Hello" は変数に入れる値です。
string 型(文字列)については、文字列を扱おうのレッスンで詳しく学びます。
ここで重要なのは、= は「等しい」という意味ではなく、「右辺の値を左辺の変数に入れる」 という意味だということです。この操作を代入と呼びます。
package main
import "fmt"
func main() {
// 右辺の "こんにちは" を左辺の greeting に代入する
var greeting string = "こんにちは"
fmt.Println(greeting) // => こんにちは
}
var による変数宣言は、関数の中だけでなく、関数の外(パッケージレベル)でも使えます。
package main
import "fmt"
var greeting string = "Hello" // 関数の外で宣言
func main() {
fmt.Println(greeting) // => Hello
}関数の外で宣言する変数はパッケージ変数と呼ばれます。
変数の値を使う
一度変数に値を代入すると、その変数名を書くだけで値を取り出せます。
package main
import "fmt"
func main() {
var animal string = "ねこ"
fmt.Println(animal) // => ねこ
fmt.Println(animal) // => ねこ(何度でも使える)
}
変数を使うと、同じ値を何度も書く必要がなくなります。
Go では、宣言した変数は必ず使う必要があります。 変数を宣言しただけで一度も使わないと、コンパイルエラーになります。これは、使われていない変数がバグの原因になることを防ぐための Go のルールです。
package main
func main() {
var name string = "Codize"
// name を一度も使っていない
} // => コンパイルエラー: declared and not used: name変数名のルール
Go の変数名には以下のルールがあります。
使える文字
- 英字(a-z, A-Z)
- 数字(0-9)
- アンダースコア(_)
package main
import "fmt"
func main() {
var name string = "太郎"
var userName string = "花子"
var age1 string = "20"
fmt.Println(name) // => 太郎
fmt.Println(userName) // => 花子
fmt.Println(age1) // => 20
}
Go では、複数の単語を組み合わせた変数名にキャメルケースを使う慣習があります。キャメルケースとは、先頭は小文字で書き、2つ目以降の単語の先頭を大文字にするスタイルです。
package main
import "fmt"
func main() {
// user + name
var userName string = "太郎"
// total + score
var totalScore int = 100
fmt.Println(userName) // => 太郎
fmt.Println(totalScore) // => 100
}
他の言語でよく使われるアンダースコア区切り(user_name のような書き方)は、Go では使いません。
使えない文字・形式
- 数字で始まる名前
- 英字、数字、アンダースコア以外の文字(例:スペース、ハイフン、記号など)
- 予約語(Go が使う特別な単語。例えば
var、func、importなど)
package main
func main() {
var 1name string = "太郎" // 数字で始まっている
var user-name string = "花子" // ハイフンを含んでいる
var var string = "hello" // var は予約語
} // => コンパイルエラー
変数の上書き
一度宣言した変数には、後から別の値を代入し直すことができます。
package main
import "fmt"
func main() {
var color string = "赤"
fmt.Println(color) // => 赤
color = "青" // 新しい値で上書き
fmt.Println(color) // => 青
}
上書きすると、前の値は消えて新しい値に置き換わります。
上書きするときは var を付けません。var は最初の宣言時にだけ使います。
ゼロ値
変数を宣言するときに、初期値を省略することもできます。
package main
import "fmt"
func main() {
var name string
fmt.Println(name) // => (空文字列が出力される)
}
初期値を省略すると、変数にはゼロ値と呼ばれるデフォルトの値が自動的に設定されます。
ゼロ値は型によって決まっています。以下はその一例です。
| 型 | ゼロ値 |
|---|---|
string | "" (空文字列) |
int | 0 |
bool | false |
int(整数)や bool(真偽値)などのデータ型については、後続のレッスンで詳しく学びます。
package main
import "fmt"
func main() {
var s string
var i int
var b bool
fmt.Println(s) // => (空文字列)
fmt.Println(i) // => 0
fmt.Println(b) // => false
}
このように、Go では初期値を指定しなくても、変数は必ず何らかの値を持つようになっています。
まとめ
- 変数はデータを入れておく「箱」のようなもの
var 変数名 型 = 値で変数を宣言するvarは関数の中でも外(パッケージレベル)でも使える=は「代入」の意味で、右辺の値を左辺の変数に入れる- 変数名は英字で始め、英数字とアンダースコアが使える
- Go では複数単語の変数名にキャメルケースを使う
- 変数は何度でも使え、後から上書きもできる(上書き時は
varを付けない) - 初期値を省略すると、型に応じたゼロ値が設定される
- 宣言した変数は必ず使う必要がある
演習に挑戦