相关疑难解决方法(0)

使用 iota 枚举字符串常量

以下示例使用 iota 定义了一系列从 3333 开始的端口号。

package main

import (
    "fmt"
)
const (
FirstPort = iota+3333
SecondPort
ThirdPort
)
func main() {
    hostAndPort := "localhost:"+fmt.Sprint(SecondPort)
    fmt.Printf("%s", hostAndPort ) 
    // Output:
    // localhost:3334
}
Run Code Online (Sandbox Code Playgroud)

在组合主机名和端口时,我想避免必须将端口常量包装起来fmt.Sprint并简单地编写,例如,"localhost:"+SecondPort. 有没有办法使用 iota 将端口号定义为字符串常量,例如"3334"

以下不起作用:

FirstPort = string(iota + 3333)
Run Code Online (Sandbox Code Playgroud)

也没有

FirstPort = fmt.Sprintf("%d", iota + 3333)
Run Code Online (Sandbox Code Playgroud)

string enumeration constants go iota

1
推荐指数
1
解决办法
781
查看次数

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

说我有下一个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);
}
Run Code Online (Sandbox Code Playgroud)

输出为:

0、1、2、99、100

如果进行中,如何使用a more golang way来处理呢?

实际上,如果我只是想跳过一些值。例如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)
}
Run Code Online (Sandbox Code Playgroud)

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

package main

import "fmt"

func main() {
    const …
Run Code Online (Sandbox Code Playgroud)

enums const go iota

1
推荐指数
1
解决办法
64
查看次数

标签 统计

go ×2

iota ×2

const ×1

constants ×1

enumeration ×1

enums ×1

string ×1