Go 言語の定数

定数はシンプルな値の識別子であり、プログラムの実行時に変更されません。

定数のデータ型は、ブール型、数値型(整数、浮動小数点、および複素数)、および文字列型のみです。

定数の定義構文:

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)。

Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です