メインコンテンツにスキップ
モジュール 1 · レッスン 3 / 5コース内の 3/50~10 min
モジュールのレッスン (3/5)

定数とイオタ

定数は、コンパイル時に既知である不変の値です。囲碁では、 const で宣言され、typed または untyped にすることができます。型なしのものには、 スーパーパワー: コンテキストで必要なタイプに適応し、ユーザーの手間を省きます。 明示的な変換を記述する必要がなくなりました。

基本的な構文

Go
const PI = 3.14
const MaxRetry int = 5
const Name = "eLearner"

MaxRetry は型付き (int): int にのみ割り当てることができます。 PI と Name は 型なし です。これらは「リテラル」のように動作し、 コンテキスト。

Go
const PI = 3.14

var f float32 = PI  // ok: PI è non tipata, diventa float32
var d float64 = PI  // ok

const ブロック

複数の定数をブロック内でグループ化できます。

Go
const (
    StateInitial = "INIT"
    StateReady   = "READY"
    StateError   = "ERROR"
)

iota: 列挙カウンタ

const ブロック内では、特別な識別子 iota は 0 から始まります。 各行で 1 ずつ増加します。これは列挙を行うためのイディオムです。

Go
const (
    Monday = iota // 0
    Tuesday       // 1
    Wednesday     // 2
    Thursday      // 3
    Friday        // 4
)

後続の行は、式が指定されていない場合、式を継承します。 そのため、= iota を繰り返さなくても、Tuesday を記述するだけで十分です。

表情のあるパターン

iota は、任意の式内に使用できます。

Go
const (
    KB = 1 << (10 * (iota + 1)) // 1 << 10 = 1024
    MB                          // 1 << 20
    GB                          // 1 << 30
    TB                          // 1 << 40
)

値をスキップする

行に値を割り当てたくない場合 (iota に値を割り当てたいため) とにかく増分する)、空の識別子 _ を使用します。

Go
const (
    _  = iota // scarta 0
    KB        // 1
    MB        // 2
)

あなたの番です

運動#go.m1.l3.e1
試行回数: 0読み込み中…

値 3.14 の定数 PI をパッケージ レベルで宣言し、それを main 内に出力します。

エディターを読み込み中…
ヒントを表示

`const PI = 3.14` は、メインの外のパッケージ レベルで行われます。

3 回の試行後に解決策が利用可能になります

運動#go.m1.l3.e2
試行回数: 0読み込み中…

iota を使用して、曜日 (月曜日、火曜日、水曜日) を 1 から番号付けした const ブロックを定義します。

エディターを読み込み中…
ヒントを表示

ブロックの最初の行で「iota + 1」を使用します。後続の行は式を継承します。

3 回の試行後に解決策が利用可能になります

Quiz#go.m1.l3.e3
準備完了

このプログラムは何を出力しますか?

Go
const (
    A = iota * 2
    B
    C
)
fmt.Println(A, B, C)
回答の選択肢

要約

  • const はコンパイル時に既知の不変値です。
  • 型なし 定数はコンテキストに適応します。変換は必要ありません。
  • const ( ... ) は、グループ関連の値をブロックします。
  • iota は、各ブロックで 0 から始まり、1 行ずつ増加します。
  • パターン: 列挙型 (= iota)、ビットマスク (= 1 << iota)、単位 (= 1 << (10*iota))。