Go - uint32 in for loop 条件(不匹配的类型 int 和 uint32)



为了类型严格,当大小不能为负数时,我有时会将大小存储为 uint。 当在 for 循环中使用时,我希望它看起来像这样:

var size uint32 = 8
for i := 0; i < size; {
    n := //doesn't matter how how this value is determined
    i += n
}

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

重写 for 循环以指定如下所示的类型:

for var i uint32 = 0; i < size; {

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

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

for i := 0; uint32(i) < size; {

var i uint32 = 0
for i < size {

第一个是低效的,因为我在每次迭代时都会进行转换,第二个不太优雅。 有没有更好的方法可以做到这一点?

你可以做:

for i := uint32(0); i < size; {
    //whatever
}

通常,我不建议使用无符号整数,即使大小永远不会为负数。我不知道有什么好处。我只在故意溢出时使用无符号整数。

最新更新