首页 > 解决方案 > 为什么正常的 for 循环允许为结构字段赋值而 for range 在 Golang 中不起作用?

问题描述

用于范围:

for _, acc := range accounts{
        accDetails, _ := repo.GetAccountDets(ctx, acc.number, acc.status)
        acc.Details = *accDetails
}

上面那个不行。

但是,以下工作。

for i:=0; i < len(accounts); i++ {
       accDetails, _ := repo.GetAccountDets(ctx, accounts[i].number, accounts[i].status)
       accounts[i].Details = *accDetails
}

这是为什么?我认为在此处添加帐户结构详细信息没有任何价值

标签: for-loopgorangefor-range

解决方案


我想说,这个问题超越了 Golang,它与底层数据结构或容器有关。在第二种情况下,您似乎已经知道容器“len(accounts)”的长度,因此它是一个可以按顺序访问的固定存储。不必总是如此。如果帐户是一个不断增加(或减少)的容器怎么办?你会如何取那个容器的长度。相反,您要问的只是“帐户”中的任何内容都可以给我。你打算怎么做?好吧,您设置了一个虚拟变量,它只允许访问或模仿容器的内容(因此带有它的所有属性或“结构字段”)。另外,它可以在后续代码中抛出,


推荐阅读