目次へ

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
)

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp