gpt4 book ai didi

go - 如何在使用 iota 定义 const 变量时跳过很多值?

转载 作者:IT王子 更新时间:2023-10-29 01:50:35 24 4
gpt4 key购买 nike

假设我有下一个 c 程序:

#include <stdio.h>

int main(int args, char* argv[])
{
enum RC {
APPLE=0,
ORANGE,
PEAR,
BANANA=99,
GRAPE
};

printf("%d, %d, %d, %d, %d\n", APPLE, ORANGE, PEAR, BANANA, GRAPE);
}

输出是:

0, 1, 2, 99, 100

如果在 go 中,我如何使用更多 golang 方式来处理它?<​​/strong>

其实如果我只是想跳过一些值。例如print 0, 1, 2, 5, 6,然后我可以使用 next 跳过一些值,但这里我需要跳过 96 个值...

package main

import "fmt"

func main() {
const (
APPLE = iota
ORANGE
PEAR
_
_
BANANA
GRAPE
)
fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)
}

而且,我也可以使用 next,但是在 GRAPE 之后我仍然有很多 const 变量...

package main

import "fmt"

func main() {
const (
APPLE = iota
ORANGE
PEAR
BANANA = 99
GRAPE = 100
)
fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)
}

那么,有没有更多的golang方式让我处理这种情况?

最佳答案

单组,手动偏移

您可以移动 iota有一个常量,并将后续的初始化表达式留空:

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

这将输出(在 Go Playground 上尝试):

0 1 2 99 100

虽然如果您在 BANANA 之前插入元素,BANANA 的值和后续常量将会改变。

打破常数组

如果你想避免这种情况,打破常量组,并开始一个新的(iota 的值重置为 0 每当保留字 const 出现在源代码中):

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

输出是一样的。在 Go Playground 上试试这个.

单组,自动偏移

如果不想破坏常量组,还是有办法的。

在你想“打破”编号的地方引入一个常量,并在随后的行中从 iota 中减去它的值。这将导致 1,因此将其与您要继续的减 1 相移。这样即使您在 BANANA 之前插入元素(但不在 _BREAKBANANA 之间),BANANA 的序数和后续常量不会改变。

const (
APPLE = iota
ORANGE
PEAR

_BREAK

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

再次输出相同。在 Go Playground 上试用.

根据您的喜好,_BREAK 可以用 iota + 1 初始化,因此应用于下一个常量的偏移量将是它获得的值:

const (
APPLE = iota
ORANGE
PEAR

_BREAK = iota + 1

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

Go Playground 上试试这个.使用您看起来更容易的那个。

关于go - 如何在使用 iota 定义 const 变量时跳过很多值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57053373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com