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

Fab*_*ien 4 go

我有几个函数uint作为他们的输入:

func foo(arg uint) {...}
func bar(arg uint) {...}
func baz(arg uint) {...}
Run Code Online (Sandbox Code Playgroud)

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

const (
    Low = 10
    High = 20
)
Run Code Online (Sandbox Code Playgroud)

在接下来的循环中,我怎么能说我想i成为一个uint?编译器抱怨它是一个int.

for i := Low; i <= High; i++ {
    foo(i)
    bar(i)
    baz(i)
}
Run Code Online (Sandbox Code Playgroud)

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

var i uint

for i = Low; i <= High; i++ {
    foo(i)
    bar(i)
    baz(i)
}
Run Code Online (Sandbox Code Playgroud)

cth*_*m06 10

for i := uint(Low); i < High; i++ {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

或者,尽管我坚持使用上述内容,但您可以键入常量.

const (
    Low = uint(10)
    High = uint(20)
)
Run Code Online (Sandbox Code Playgroud)

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


zzz*_*zzz 8

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

操场

或者定义要键入的常量:

const (
        Low  uint = 10
        High uint = 20
)

...

for i := Low; i <= High; i++ {
        foo(i)
        bar(i)
        baz(i)
}
Run Code Online (Sandbox Code Playgroud)

操场