定数宣言を理解する!Goでは型を指定しない方が便利です

Go言語
この記事は約8分で読めます。
Go初学者
Go初学者

Go言語の定数を宣言する方法を知りたいんだけど…

この記事ではGo言語の定数について理解することができます!
  • 定数を宣言する方法
  • 複数の定数を宣言する方法
  • 定数を宣言する時に便利な方法2つ

変数とは違い再代入できないのが定数です。

Go言語の定数について理解していきましょう。

あと、覚えておいて損はしないGo言語で定数を宣言する時に便利な方法も合わせてご紹介いたします。

もりぴ
この記事を書いた人

XHTML1.0時代にHTML&CSSを勉強した経験あり。無趣味だった私が2020年5月からプログラミング学習を開始し現在も挫折せずに趣味で学習を楽しんでいる51歳。プログラミングの楽しさをブログを通してお伝えしていきます。

もりぴをフォローする

Go言語で定数を宣言してみよう

数値であれば円周率とか、URLやサイト名などの固有の値を宣言するのに重宝するのが定数です。

Go言語では、以下のように定数を宣言するのが一般的です。

const 定数名 = 値

定数は、他のパッケージからも参照できるように関数外(グローバル)に記述します。

変数と違い「型」を指定しない方が、定数を柔軟に扱うことができます。

もりぴ
もりぴ

もちろん「型」を指定して定数を宣言することもできます。詳細はのちほど。

Go言語の定数宣言をコードで書いてみる

// 定数を宣言してみる
package main

import "fmt"

// 関数外で定数宣言
// 円周率を定数宣言
const Pi = 3.141

func main() {
    // 関数内で定数を呼び出せる
    fmt.Println("円周率は", Pi, "です。")
}
// 出力結果
$ go run main.go 
円周率は 3.141 です。

関数外で宣言した定数が、関数内で呼び出されるのが確認できます。

定数名の頭文字は大文字?小文字?どちらがいいの

定数名の頭文字を大文字で宣言すると、他のパッケージからも参照(グローバル)することができます。

逆に頭文字を小文字で宣言すると、記述したファイル内(パブリック)でしか使用することができません。

定数は固有の値で不変なので、一般的には他からも参照できるように頭文字を大文字で定数宣言するのが良いでしょう。

もりぴ
もりぴ

このブログでもお世話になっているfmtパッケージの Println関数 も大文字ですよね。これも同じ意味なんです。

Go言語の定数を型指定して宣言してみよう

では、定数を型指定して宣言してみます。

// 定数を型を指定して宣言してみる
package main

import "fmt"

// 関数外で定数宣言
const i1 int = 10
const i2 int64 = 20

func main() {
    // 関数内で定数を呼び出せる
    fmt.Println("i1 = ", i1)
    fmt.Println("i2 = ", i2)
}
// 出力結果
$ go run main.go 
i1 =  10
i2 =  20
もりぴ
もりぴ

無事に出力されました!

Go言語の型を指定しない定数宣言の柔軟性を試してみよう!

だけど、 i1i2 を足し算したい時、どうしますか?

型の記事でもお伝えしたように、 intint64 は型が違うので足し算できません。

// 定数を型を指定して宣言してみる
package main

import "fmt"

// 関数外で定数宣言
const i1 int = 10
const i2 int64 = 20

func main() {
    // 関数内で定数を呼び出せる
    fmt.Println("i1 = ", i1)
    fmt.Println("i2 = ", i2)

    // 一応足し算してみる
    fmt.Println("i1 + i2 =", i1+i2)
}
// 出力結果
$ go run main.go 
# command-line-arguments
./main.go:16:29: invalid operation: i1 + i2 (mismatched types int and int64)
もりぴ
もりぴ

違う型なのでエラーがでました。

でも、定数を宣言する時に型を指定しない場合は、Go言語は定数に関しては柔軟に対応してくれます。

// 定数を宣言してみる
package main

import "fmt"

const i1 = 10
const i2 = 20

func main() {
    // 関数内で定数を呼び出せる
    fmt.Println("i1 = ", i1)
    fmt.Println("i2 = ", i2)

    // 足し算してみる
    fmt.Println("i1 + i2 =", i1+i2)
}
// 出力結果
$ go run main.go 
i1 =  10
i2 =  20
i1 + i2 = 30

エラーも出ずに足し算できました。

だけど、これだと整数型同士なのでGo言語の定数宣言の柔軟性をアピールしきれていません。

定数を型指定しないで小数と整数を代入して、これを関数内で足し算できるか試してみましょう。

もりぴ
もりぴ

ちなみに変数では intfloat64 の足し算はできません。

// 定数を宣言してみる
package main

import "fmt"

// 関数外で定数宣言
const Pi = 3.141
const i3 = 100

func main() {
    // 定数Piとi3を足し算する
    fmt.Println("Pi + i3 =", Pi+i3)
}
// 出力結果
$ go run main.go 
Pi + i3 = 103.141

エラーも出力されずに、足し算できたことが確認できます。

他のパッケージからも参照されることを考えると、定数は型指定しない方がいいのかな…というのが私個人の考えです。

Go言語で複数の定数をまとめて宣言するには

Go言語では、変数同様に複数の定数をまとめて宣言することができます。

// 複数の定数をまとめて宣言してみる
package main

import "fmt"

// 定数を複数宣言する場合
const (
    URL           = "https://golangstart.com"
    SiteName      = "Golang!Go!!"
    Administrator = "morip"
)

func main() {
    // 定数の値を出力する
    fmt.Println("URL = ", URL)
    fmt.Println("サイト名:", SiteName)
    fmt.Println("サイト管理者:", Administrator)
}
// 出力結果
$ go run main.go 
URL =  https://golangstart.com
サイト名: Golang!Go!!
サイト管理者: morip
もりぴ
もりぴ

const を記述する回数を減らすことができます。

Go言語の定数宣言の便利な方法2選

Go言語の定数を宣言するときに、覚えておきたい便利な方法がありますのでご紹介します。

1.定数の値を省略して複数宣言する

もりぴ
もりぴ

ちょっとわかりづらいタイトルなので、実際にコードを見てみましょう。

// 複数の定数をまとめて宣言してみる
package main

import "fmt"

// 定数は値を省略して指定することも可能
const (
    A = 10
    B
    C
    D = "golang"
    E
    F
)

func main() {
    // 定数の値を出力する
    fmt.Println(A, B, C, D, E, F)
}
// 出力結果
$ go run main.go 
10 10 10 golang golang golang

定数を宣言しているところに注目してください。

A,B,C,D,E,F と6つの定数を宣言して、実際に値を代入しているのが "A""D" です。

値の代入が省略されている”B”と”C”には”A”の値が、”E”と”F”には”D”の値が代入されていることが出力結果から確認できます。

このように、同じ値を代入したい時は省略することも可能です。

2.定数の値に0から始まる連番を代入する:iota

定数を複数宣言する必要があり、かつ0から始まる連番の値を代入する時に便利なのが iota です。

// 複数の定数をまとめて宣言してみる
package main

import "fmt"

// iota(0から始まる連番を返す)
const (
    A0 = iota
    A1
    A2
    A3
    A4
    A5
)

func main() {
	// 定数の値を出力する
	fmt.Println(A0, A1, A2, A3, A4, A5)
}
// 出力結果
$ go run main.go 
0 1 2 3 4 5

コードも見やすくなりますので、使用する機会があればひとつづつ値を代入しないで iota を活用していきましょう。

【まとめ】Go言語の定数宣言理解できましたか?

今回はGo言語の定数宣言についてお伝えしてきました。

Go言語の定数宣言で押さえておくこと!
  • 定数宣言は const 定数名 = 値 で宣言する
  • 型を指定して定数を宣言することもできる const 定数名 型 = 値
  • 定数は型を指定しない方が柔軟に値を使用できる
  • 定数名は頭文字を大文字にするのが一般的
  • 定数は一度に複数宣言することができる
  • 値を省略して複数の定数を宣言することができる
  • iota を使用すると0から始まる連番の値を複数宣言することができる

Go言語で定数を宣言する基本的に理解しておきたいことをまとめました。

実際にコードを書き出力結果を確認していきましょう。

comment

タイトルとURLをコピーしました