GoはGolangとも呼ばれ、Googleが開発した静的型付け並行処理プログラミング言語です。変数は他のプログラミング言語でも基本的な部分であり、Goも例外ではありません。
Goでは、varキーワードを使用して変数を宣言し、その後に変数名、型、値を指定します。
var name string = "John Smith"
変数の宣言時に値がわかっている場合は、データ型を省略することができます。
var name = "John Smith"
Goでは明示的に型を宣言しなくても、初期化された値を元にランタイムが型を推論し、自動的に変数の型を決定します。これを型推論といいます。
変数に値を代入するときに:=とすることでvarを省略することもできます。
name := "John Smith"
Goでは、一度に複数の変数を宣言することもできます。
name, age := "John Smith", "30"
以下のように、var宣言時にカッコを使い、まとめて書くこともできます。
var (
userID int = 123
username string = "johnsmith"
email string = "johnsmith@example.com"
firstName string = "John"
lastName string = "Smith"
isActive bool = true
balance float64 = 1000.00
)
fmt.Println("User Information:")
fmt.Println("User ID:", userID)
fmt.Println("Username:", username)
fmt.Println("Email:", email)
fmt.Println("Full Name:", firstName, lastName)
fmt.Println("Is Active:", isActive)
fmt.Println("Balance:", balance)
この例では、ユーザーに関連するいくつかの変数を宣言しています。これらを1つのvar文にまとめることで、どの変数を扱っているのかがわかりやすくなり、コードが読みやすく理解しやすくなります。
例えばテストを記述する際や、大量に変数宣言をする必要がある場合などは、このように書くと非常にコードが見やすくなるので覚えておくと良いでしょう。
Goは、以下のようにさまざまなデータ型で変数をサポートしています。
・文字列
var name string = "John Smith"
・整数
var age int = 30
・浮動小数点数
var height float64 = 5.9
・ブーリアン
var isMarried bool = false
・配列
var colors [3]string = [3]string{"red", "green", "blue"}
・スライス
numbers := []int{1, 2, 3, 4, 5}
・マップ
person := map[string]string{"name": "John Smith", "age": "30"}
・構造体
type Person struct {
Name string
Age int
}
var john Person = Person{Name: "John Smith", Age: 30}
Goは、値が指定されていない場合、自動的に変数にデフォルト値を割り当てます。このデフォルト値はゼロ値と呼ばれ、変数の種類によって異なります。例えば、文字列のゼロ値は空文字列で、整数のゼロ値は0です。以下は、ゼロ値を持つ変数の例です。
var email string
fmt.Println(email) // ""
var age int
fmt.Println(age) // 0
変数のスコープとは、その変数がコード内のどこにアクセスできるかを決めるものです。Goでは、グローバルとローカルの2種類のスコープがあります。グローバル変数はコードのどこからでもアクセスできますが、ローカル変数は宣言されたコードのブロックの中だけでアクセスできます。
以下は、グローバル変数の例です。
var name string = "John Smith"
func main() {
fmt.Println(name)
}
以下は、ローカル変数の例です。
func main() {
var name string = "John Smith"
fmt.Println(name)
}
この例では、変数nameはmain関数内でのみアクセス可能であり、main関数の外からアクセスしようとするとエラーになります。
Goはポインタもサポートしています。ポインタは、他の変数のメモリアドレスを格納する変数です。ポインタを使うと、変数の値を渡す代わりに、参照で渡すことができます。
func main() {
name := "John Smith"
ptr := &name
fmt.Println(*ptr)
}
この例では、変数ptrは変数nameのメモリアドレスを格納するポインタです。演算子&で変数のメモリアドレスを取得し、*演算子でそのメモリアドレスに格納されている値にアクセスすることができます。