定数はシンプルな値の識別子であり、プログラムの実行時に変更されません。
定数のデータ型は、ブール型、数値型(整数、浮動小数点、および複素数)、および文字列型のみです。
定数の定義構文:
const identifier [type] = value
コンパイラーは変数の値に基づいて型を推測できるため、型指定子[type]は省略できます。
- 明示的な型定義:const b string = “abc”
- 暗黙的な型定義:const b = “abc”
同じで複数の型の宣言は、次のように省略できます。
const c_name1, c_name2 = value1, value2
次の例は、定数の使用を示します。
実例
package main
import "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("面積は : %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()関数を使用して、式の値を計算できます。 定数式では、関数は組み込み関数である必要があります。そうでない場合、コンパイルされません。
実例
package main
import "unsafe"
const (
a = "abc"
b = len(a)
c = unsafe.Sizeof(a)
)
func main(){
println(a, b, c)
}
上記のコードを実行した結果は次のとおりです。
abc 3 16
iota
iotaは特別な定数であり、コンパイラーが変更できる定数と言われます。
iotaはconstキーワードが表示される場合、0にリセットされます。(const内の最初の行の前)constに1行ごと定数宣言が増加すれば、iotaは一回カウントします。(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
)
iota使い方
実例
package main
import "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の他の面白い実例をご覧ください。
実例
package main
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ビットをシフトし、バイナリで110になり、つまり6です。
- k=3:左に2ビットをシフトし、バイナリで1100、になり、つまり12です。
- l=3:左に3ビットをシフトし、バイナリで11000になり、つまり24です。
ヒント:<<n==*(2^n)。
コメントを残す