Go言語定数
定数は、単純な値の識別子であり、プログラムの実行中に変更されない量です。
定数のデータ型は、ブール、数値 (整数、浮動小数点、複素数)、および文字列のみです。
定数の定義形式:
const identifier [type] = value
型指定子 [type] は省略できます。これは、コンパイラが値から変数の型を推測できるためです。
- 明示的な型定義:
const b string = "abc"
- 暗黙の型定義:
const b = "abc"
同じ型の複数の宣言は、次のように省略できます。
const c_name1, c_name2 = value1, value2
次の例は、定数の使用を示しています。
例
パッケージメイン
「fmt」をインポート
func main() { const LENGTH int = 10 const WIDTH int = 5 var area int const a, b, c = 1, false, "str" //複数代入
area = LENGTH * WIDTH
fmt.Printf("The area is: %d", area)
println()
println(a, b, c)
}
上記の例を実行した結果は次のとおりです。
面积为 : 50
1 false str
定数は列挙型としても使用できます。
const (
Unknown = 0
Female = 1
Male = 2
)
数字の 0、1、2 は、それぞれ不明な性別、女性、男性を表します。
定数は、len()、cap()、unsafe.Sizeof() 関数を使用して式を評価できます。定数式では、関数は組み込み関数でなければなりません。それ以外の場合はコンパイルされません。
例
パッケージメイン
import "unsafe"
const (
a = "abc"
b = len(a)
c = unsafe.Sizeof(a)
)
func main(){ println(a, b, c) }
上記の例を実行した結果は次のとおりです。
abc 3 16
イオタ
特別な定数である iota は、コンパイラによって変更できる定数と見なすことができます。
const キーワードが現れると (const 内の最初の行の前に) iota は 0 にリセットされ、const 内の定数宣言の新しい行ごとに iota が 1 回カウントされます (iota は const ステートメント ブロックの行インデックスとして理解できます)。
iota は列挙値として使用できます。
const (
a = iota
b = iota
c = iota
)
最初の iota は 0 に等しく、その値は iota が新しい行で使用されるたびに自動的に 1 ずつ増加します; したがって、a=0、b=1、c=2 は次のように省略できます:
const (
a = iota
b
c
)
イオタの使い方
例
パッケージメイン
「fmt」をインポート
func main() { const ( a = iota //0 b //1 c //2 d = "ha" //独立値、iota += 1 e //"ha" iota += 1 f = 100 // iota +=1 g //100 iota +=1 h = iota //7, レジュームカウントi //8 ) fmt.Println(a,b,c,d,e,f,g,h,i) }
上記の例を実行した結果は次のとおりです。
0 1 2 ha ha 100 100 7 8
別の興味深い iota の例を見てください。
例
パッケージメイン
import "fmt"
const (
i=1<<iota
j=3<<iota
k
l
)
func main() { fmt.Println("i=",i) fmt.Println("j=",j) fmt.Println("k=",k) fmt.Println("l=",l) }
上記の例を実行した結果は次のとおりです。
i= 1
j= 6
k= 12
l= 24
iota は 0 から 1 を自動的に追加することを意味するので、i=1<<0、j=3<<1 (<< は左シフトを意味します )、つまり i=1、j=6、これは問題ありません。キーはk と l の出力結果から、k=3<<2、l=3<<3 となります。
簡単なステートメント:
- i=1 : 左に 0 ビットシフトし、1 のままです。
- j=3 : 1 ビット左にシフトし、2 進数の 110、つまり 6 になります。
- k=3 : 左に 2 ビットシフトし、2 進数の 1100、つまり 12 になります。
- l=3 : 3 ビット左にシフトし、バイナリ 11000、つまり 24 になります。
注:<<n==*(2^n)。