5. 変数と定数
5.1 変数
変数とは、値を保持するための格納場所です。
変数には型があり、同じ型の値しか代入できません。
変数の宣言
変数の宣言は以下の書式で行います。
var 変数名 型 = 初期値
// 復数宣言
var (
変数名1 型1 = 初期値1
変数名2 型2 = 初期値2
)
var 変数名1, 変数名2 型 = 初期値1, 初期値2
初期値を指定しない宣言も可能です。この場合、初期値にはゼロ値が入ります。
ゼロ値は型によって異なります。例えば、数値なら0、文字列なら"" がゼロ値です。
var 変数名 型
// 復数宣言
var (
変数名1 型1
変数名2 型2
)
var 変数名1, 変数名2 型
また、型を明記しない省略形の変数宣言もあります。
型は初期値によって決まります。
var 変数名 = 初期値
// 復数宣言
var (
変数名1 = 初期値1
変数名2 = 初期値2
)
var 変数名1, 変数名2 = 初期値1, 初期値2
以下の省略宣言は関数内でしか使用できません。
変数名 := 初期値 // 復数宣言(未宣言の変数が1つ以上あること) 変数名1, 変数名2 := 初期値1, 初期値2
例)
var greet string = "hello" var greet string // 変数greetには、ゼロ値の""が入る var greet = "hello" // 変数greetは、初期値からの型推論でstring型となる greet := "hello" // 変数greetは、初期値からの型推論でstring型となる
変数の代入
変数の代入例を見てみます。
package main
import "fmt"
func main() {
// s は型推論で文字列型となる
s := "hello"
// hello と表示される
fmt.Println(s)
// 代入
s = "bye"
// bye と表示される
fmt.Println(s)
}
5.2 定数
定数とは、不変の変数です。
定数の宣言
定数とは、再代入ができない変数のようなものです。
定数宣言時に値が決まります。
const 定数名 = 値
// 復数宣言
const (
定数名1 = 値1
定数名2 = 値2
)
const 定数名1, 定数名2 = 値1, 値2
型を指定した定数の宣言も可能です。
const 定数名 型 = 値
// 復数宣言
const (
定数名1 型1 = 値1
定数名2 型2 = 値2
)
const 定数名1, 定数名2 型 = 値1, 値2
型を指定しない場合はuntypedとなり、型がない定数となります。
具体的な違いを見てみましょう。
string型を指定した場合、string型のエイリアスであるMyString型には代入できません。
const typedHello string = "Typed String : Hello" type MyString string var myString MyString = typedHello // エラーになる
string型を指定しない場合、string型のエイリアスであるMyString型には代入できます。
const untypedHello = "Untyped String : Hello" type MyString string var myStringOK MyString = untypedHello // 代入できる
untypedの定数は以下の種類があります。
- untyped string
- untyped int
- untyped rune
- untyped float64
- untyped complex128
- untyped bool
文字列
// untyped string const Hello = "Hello" // string const Hello string = "Hello"
整数
// untyped int const MyInt = 3 // typed int const MyInt int = 3
浮動小数点数
// untyped float64 const Zero = 0.0 // typed float64 const Zero float64 = 0.0
複素数
// untyped complex128 const Two = 2.0 + 0i // typed complex128 const Two complex128 = 2.0 + 0i
Boolean
// untyped bool const True = true // typed bool const True bool = true
iota
Go言語ではiotaとよばれる定数生成器があります。
列挙された定数に対して、untyped int を定義できます。
const (
c0 = iota // c0 == 0
c1 // c1 == 1
c2 // c2 == 2
)
() で囲まれたconst宣言リストの中では、最初の宣言以外の式リストは省略できます。
iotaと併用することで簡単に連続値の宣言が可能です。
type Weekday int
const (
Sunday Weekday = iota // Sunday == 0
Monday // Monday == 1
Tuesday // Tuesday == 2
Wednesday // Wednesday == 3
Thursday // Thursday == 4
Friday // Friday == 5
Saturday // Saturday == 6
)

