Go - uint32 in for for condition(不匹配类型int和uint32)

Ric*_*ith 19 type-conversion go

为了类型严格,我有时会将尺寸存储为uint,当尺寸不能为负时.当用于for循环时,我希望它看起来像这样:

var size uint32 = 8
for i := 0; i < size; {
    n := //doesn't matter how how this value is determined
    i += n
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误消息: invalid operation: i < size (mismatched types int and uint32)

重写for循环以指定类似这样的类型:

for var i uint32 = 0; i < size; {
Run Code Online (Sandbox Code Playgroud)

产生此编译器错误: syntax error: var declaration not allowed in for initializer

解决这些错误的唯一方法是:

for i := 0; uint32(i) < size; {
Run Code Online (Sandbox Code Playgroud)

要么

var i uint32 = 0
for i < size {
Run Code Online (Sandbox Code Playgroud)

第一个是低效的,因为我在每次迭代时都会进行投射,而第二个则不那么优雅.有一个更好的方法吗?

Ste*_*erg 27

你可以做:

for i := uint32(0); i < size; {
    //whatever
}
Run Code Online (Sandbox Code Playgroud)

一般来说,即使大小永远不是负数,我也不建议使用无符号整数.我不知道有什么好处.当我故意溢出时,我只使用无符号整数.

  • 据推测,OP具有强大的C背景,其尺寸为"size_t". (2认同)