我正在尝试创建一个结构数组并在其中启动一些数据。结构: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);}以下是上述代码的输出:00000我想弄清楚为什么不是01234我也试过&在Philospher前面用add,还是一样的
2 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
您的make电话正在创建一个初始长度为 5 的 Philosopher 切片。从规范中:
使用内置函数 为给定元素类型 T 创建一个新的初始化切片值,该函数
make接受切片类型和指定长度和可选容量的参数。使用 make 创建的切片总是分配一个新的隐藏数组,返回的切片值指向该数组。也就是说,执行make([]T, length, capacity)
前 5 位哲学家是哲学家的零值。您将另外 5 个 Philosophers 附加到切片的末尾,使其最终长度为 10。我相信你的意思是创建一个长度为 0 但容量为 5 的切片:
table := make([]Philosopher, 0, numPhil)
https://play.golang.org/p/a5QP6wd6Rs_9
桃花长相依
TA贡献1860条经验 获得超8个赞
因为这:
table := make([]Philospher, numPhil)
这table使用numPhil空元素创建。然后你将你Philosohper的 s 添加到这个空表的末尾,并打印前 5 个。显然,numPhil >= 5,所以它打印出第一个空表。
将初始化更改为:
table:= make([]Philosopher,0,numPhil)
为 numPhil 元素保留空间,大小为 0。
- 2 回答
- 0 关注
- 171 浏览
添加回答
举报
0/150
提交
取消
