[Golang] 定数

2021-09-25 hit count image

Golangで定数を宣言して使う方法について説明します。

概要

今回のブログポストではGolangで定数を宣言して使う方法について説明します。Golangで変数を宣言して使う方法について分からない方は、下記のリンクを参考してください。

このブログポストで紹介するソースコードは下記のリンクを確認できます。

定数

定数は変数とは違って設定した値を変更することができません。Golangで定数を使う方法を調べるためmain.goファイルを生成して下記のように修正します。

package main

import "fmt"

func main() {
    const num int = 10

    fmt.Println(num)
}

Golangでは下記のようにconstキーワードを使って定数を宣言します。

// const 定数名 タイプ = 初期値
const value int = 10

定数は初期値を省略することができる変数とは違って初期化を必ずする必要があります。そうしないと、コンパイルエラーが発生します。

const value int = 10
value = 20 // ERROR

1回初期化された定数は再び値を設定することができません。値を設定するとコンパイルエラーが発生します。

定数のタイプ

定数も変数ようにタイプを指定しなくて省略することができます。しかし、定数は変数と違って定数を使う時点でタイプが決定されます。

func main() {
    const PI = 3.14

    var a int = PI * 100

    fmt.Println(a)
}

Golangでは同じタイプだけ演算ができます。したがってfloatタイプである3.14とintタイプである100は掛け算ができません。しかし、定数にタイプを指定してなかったので、定数を使う時点でタイプが決定され、上のコードはコンパイルエラーが発生しないです。

func main() {
    const PI float32 = 3.14

    var a int = PI * 100 // ERROR

    fmt.Println(a)
}

しかし、上のように定数とタイプを一緒に定義すると、タイプが違うと判断されコンパイルエラーが発生します。

func main() {
    var PI = 3.14

    var a int = PI * 100 // ERROR

    fmt.Println(a)
}

変数は定数と違って変数を宣言する時、タイプが決定されます。したがって、上のように定数の代わりで変数を使うとコンパイルエラーが発生します。

列挙型

Golangでは定数を次のように列挙型(Enum)でよく使います。

const (
    Red   int = 0
    Blue  int = 1
    Green int = 2
)

func main() {
    fmt.Println(Red)
    fmt.Println(Blue)
    fmt.Println(Green)
}

プログラムを実行すると次のような結果が確認されます。

0
1
2

iota

Golangでは次のようにiotaキーワードを使ってもっと簡単に列挙型定数を生成することができます。

const (
    Red int = iota
    Blue int = iota
    Green int = iota
)

func main() {
    fmt.Println(Red)
    fmt.Println(Blue)
    fmt.Println(Green)
}

繰り返して使ってるタイプとiotaは下記のように省略できます。

const (
    Red int = iota
    Blue
    Green
)

また、タイプも省略が出来って下記のようにもっと簡単に宣言することができます。

const (
    Red = iota
    Blue
    Green
)

完了

これでGolangで定数を宣言して使う方法についてみてみました。また、iotaを使って列挙型定数を生成する方法もみてみました。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

アプリ広報

今見てるブログを作成たDekuが開発したアプリを使ってみてください。
Dekuが開発したアプリはFlutterで開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。

Posts