ホームページ  >  記事  >  バックエンド開発  >  Go で連続した整数を定数に割り当てるときに Iota 値をスキップするにはどうすればよいですか?

Go で連続した整数を定数に割り当てるときに Iota 値をスキップするにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-22 05:54:14872ブラウズ

How Can I Skip Iota Values When Assigning Sequential Integers to Constants in Go?

Go で Iota を使用して定数値をスキップする

Go では、iota は、列挙された定数に連続する整数を割り当てるために使用される特別な定数です。相変わらずのグループ。ただし、特定の定数へのiota値の割り当てをスキップする必要がある場合があります。ここでは 3 つのアプローチを示します:

単一グループ、手動オフセット

定数が同じグループ内にある場合は、定数を使用して手動で iota をシフトできます。スキップしたい定数の空の初期化式:

const (
    APPLE = iota
    ORANGE
    PEAR
    BANANA = iota + 96 // 96 is added manually to get 99
    GRAPE
)
fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)

このアプローチでは、目的の出力が生成されます。 0、1、2、99、100。ただし、順序を変更したり、BANANA の前に新しい定数を挿入すると、BANANA と後続の定数の値に影響します。

定数グループの分割

予期しない値の変更を回避するには、定数グループを分割し、新しいグループを開始します。 one:

const (
    APPLE = iota
    ORANGE
    PEAR
)

const (
    BANANA = iota + 99 // Iota resets to 0
    GRAPE
)
fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)

これも同じ出力を生成し、BANANA の前に新しい定数を挿入しても、BANANA と後続の定数の値には影響しません。

単一グループ、自動Offset

値をスキップしながら単一の定数グループを維持するには、ブレーク位置に定数を導入します。

const (
    APPLE = iota
    ORANGE
    PEAR

    _BREAK

    BANANA = iota - _BREAK + 98 // Continues from 98 + 1 = 99
    GRAPE
)
fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)

このアプローチにより、順序を変更したり、BANANA の前に新しい定数を挿入したりしても、BANANA と後続の定数の値に影響を与えません。オフセットの計算を簡素化するために、_BREAK を iota 1 で初期化できるため、次の定数に適用するオフセットは _BREAK 自体の値になります:

const (
    APPLE = iota
    ORANGE
    PEAR

    _BREAK = iota + 1

    BANANA = iota - _BREAK + 99 // Continues from 99
    GRAPE
)

以上がGo で連続した整数を定数に割り当てるときに Iota 値をスキップするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。