为了严格起见,当一个大小不能是负数时,我有时会将我的大小存储为uint.在f或循环中使用时,我希望它看起来如下所示:

var size uint32 = 8
f或 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)

重写f或循环以指定如下类型:

f或 var i uint32 = 0; i < size; {

产生此编译器错误:syntax err或: var declaration not allowed in f或 initializer

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

f或 i := 0; uint32(i) < size; {

var i uint32 = 0
f或 i < size {

第一次是低效的,因为我在每一次迭代中都使用,而第二次则不那么优雅.有更好的方法吗?

推荐答案

您可以执行以下操作:

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

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

Go相关问答推荐

macOS上GoLand 2023.3.4中的代码导航

转到http服务器头内容-类型设置为多部分/表单-数据,但在客户端获取内容-类型:文本/纯文本

包裹网.Conn导致挂起读取

确定果朗CSV行中的字节数

无法读取postman 中的表单数据

为什么标准库中的 IsSorted 会反向迭代切片?

通过 Terraform 中的 MapNestedAtribute 进行迭代

如何使用gosdk在Dynamodb中进行UpdateItem时,将ValueBuilder对象声明为StringSet类型?

Go test "-run -" 标志执行测试更快

泛型:实现嵌套接口

具有嵌套重复的正则表达式

没有任务角色的 AWS CDK ECS 任务定义

不能使用 mockDB(*MockDB 类型的变量)作为 struct 文字中的 *gorm.DB 值

从 os.stdout 读取

如何使用 math/big 对 bigInt 进行取模?

有没有办法判断值是否满足接口中定义的类型约束?

Ginkgo/Gomega panic 测试失败

Go 赋值涉及到自定义类型的指针

Go 错误:Is() 和 As() 声称是递归的,是否有任何类型实现错误接口并支持这种递归 - 无错误?

获取单调时间,同 CLOCK_MONOTONIC