一尘不染

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

go

我有几个函数以a 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)
}

阅读 248

收藏
2020-07-02

共1个答案

一尘不染

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

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

另外,尽管我坚持上述内容,但是您可以键入常量。

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

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

2020-07-02