在Go中,如何自动将循环索引强制转换为uint?

时间:2013-04-10 14:02:46

标签: go

我有一些函数以uint作为输入:

func foo(arg uint) {...}
func bar(arg uint) {...}
func baz(arg uint) {...}

我有一个循环,其限制都是常量uint

const (
    Low = 10
    High = 20
)

在以下循环中,我怎么说我希望i成为uint?编译器抱怨它是int

for i := Low; i <= High; i++ {
    foo(i)
    bar(i)
    baz(i)
}

我真的不想在每个函数调用上调用uint(i),并且执行以下操作是正确的,但让我觉得很脏:

var i uint

for i = Low; i <= High; i++ {
    foo(i)
    bar(i)
    baz(i)
}

2 个答案:

答案 0 :(得分:10)

for i := uint(Low); i < High; i++ {
    ...
}

还要注意uint()不是函数调用,当应用于常量和(我相信)相同大小的有符号整数时,完全在编译时发生。

或者,虽然我坚持使用上述内容,但您可以键入常量。

const (
    Low = uint(10)
    High = uint(20)
)

然后i := Low也是uint。在大多数情况下,我会坚持使用无类型常量。

答案 1 :(得分:8)

for i := uint(Low); i <= High; i++ { //EDIT: cf. larsmans' comment
        foo(i)
        bar(i)
        baz(i)
}

Playground

或者定义要输入的常量:

const (
        Low  uint = 10
        High uint = 20
)

...

for i := Low; i <= High; i++ {
        foo(i)
        bar(i)
        baz(i)
}

Playground