
Go言語の定数を宣言する方法を知りたいんだけど…
変数とは違い再代入できないのが定数です。
Go言語の定数について理解していきましょう。
あと、覚えておいて損はしないGo言語で定数を宣言する時に便利な方法も合わせてご紹介いたします。
Go言語で定数を宣言してみよう
数値であれば円周率とか、URLやサイト名などの固有の値を宣言するのに重宝するのが定数です。
Go言語では、以下のように定数を宣言するのが一般的です。
定数は、他のパッケージからも参照できるように関数外(グローバル)に記述します。
変数と違い「型」を指定しない方が、定数を柔軟に扱うことができます。

もちろん「型」を指定して定数を宣言することもできます。詳細はのちほど。
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言語の型を指定しない定数宣言の柔軟性を試してみよう!
だけど、 i1
と i2
を足し算したい時、どうしますか?
型の記事でもお伝えしたように、 int
と int64
は型が違うので足し算できません。
// 定数を型を指定して宣言してみる
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言語の定数宣言の柔軟性をアピールしきれていません。
定数を型指定しないで小数と整数を代入して、これを関数内で足し算できるか試してみましょう。

ちなみに変数では int
と float64
の足し算はできません。
// 定数を宣言してみる
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言語で定数を宣言する基本的に理解しておきたいことをまとめました。
実際にコードを書き出力結果を確認していきましょう。
comment