go - 为什么循环中赋值后的ID为0?
问题描述
我正在尝试创建一个结构数组并在其中启动一些数据。
结构:
type Person struct{
id int
enlighten bool
channel chan int
}
作业:
table := make([]Philospher, numPhil)
for i :=0; i < 5; i++{
p := Philospher{
id: i,
enlighten: false,
channel: make(chan int),
}
table = append(table, p)
}
for j :=0; j < 5; j++{
fmt.Println(table[j].id);
}
以下是上述代码的输出:
0
0
0
0
0
我想弄清楚为什么不是
0
1
2
3
4
我也试过&
在Philospher前面用add,也是一样的
任何帮助表示赞赏
解决方案
您的make
电话正在创建一个初始长度为 5 的 Philosopher 切片。从规范中:
使用内置函数 为给定元素类型 T 创建一个新的初始化切片值,该函数
make
接受切片类型和指定长度和可选容量的参数。使用 make 创建的切片总是分配一个新的隐藏数组,返回的切片值指向该数组。也就是说,执行make([]T, length, capacity)
前 5 位哲学家是哲学家的零值。您将另外 5 个 Philosophers 附加到切片的末尾,使其最终长度为 10。我相信你的意思是创建一个长度为 0 但容量为 5 的切片:
table := make([]Philosopher, 0, numPhil)
推荐阅读
- javascript - 反应映射对象数组按值创建容器并将对象插入该容器
- c++ - 没有为 Makefile 创建目标的规则
- java - 我可以覆盖确定重复的 Hashsets 方式吗?
- nagios - 从 Observium 到 Icinga 的通知传输
- python - bs4 的问题,声称我正在使用 python 3 运行 bs4 的 python 2 版本
- excel - 如何使用 Microsoft Excel 生成图表
- java - Arraylist<> 为 null,尽管它已在构造函数中初始化
- python - 尚未安装 RandomForestClassifier 实例。在使用此方法之前使用适当的参数调用“fit”
- angular - 当用户在垫选项卡之间切换时重新启动表单
- html - Bootstrap 4 文本从手机分辨率表中“出去”