为了类型严格,我有时会将尺寸存储为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 {
第一个是低效的,因为我在每次迭代时都在施放,而第二个则不那么优雅。有更好的方法吗?
答案 0 :(得分:25)
你可以这样做:
for i := uint32(0); i < size; {
//whatever
}
通常,即使大小永远不是负数,我也不建议使用无符号整数。我不知道有什么好处。当我故意溢出时,我只使用无符号整数。