for-loop - 为什么正常的 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
}
这是为什么?我认为在此处添加帐户结构详细信息没有任何价值
解决方案
我想说,这个问题超越了 Golang,它与底层数据结构或容器有关。在第二种情况下,您似乎已经知道容器“len(accounts)”的长度,因此它是一个可以按顺序访问的固定存储。不必总是如此。如果帐户是一个不断增加(或减少)的容器怎么办?你会如何取那个容器的长度。相反,您要问的只是“帐户”中的任何内容都可以给我。你打算怎么做?好吧,您设置了一个虚拟变量,它只允许访问或模仿容器的内容(因此带有它的所有属性或“结构字段”)。另外,它可以在后续代码中抛出,
推荐阅读
- python - Keras:损失在inf和number之间波动
- c# - 从 C# 中的键/值集合中读取特定的 HTTP 标头值
- visual-studio-extensions - VSIX - 文本视图关闭时的事件
- css - 调整一些图像宽度以保持在父级内,水平对齐
- android - 在 Firebase 中为用户 ID 创建增量方法
- string - class java.lang.String (substring) boolean/if 语句错误
- angular - Angular CDK 使用 cdkDropListConnectedTo 连接多个拖放区
- c++ - 从 void 指针初始化类/结构
- c - 如何使 switch 语句接受百分比而不是字母等级?
- java - 在 Drools 中为组执行单个规则