首页 > 解决方案 > 为什么循环中赋值后的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,也是一样的

任何帮助表示赞赏

标签: go

解决方案


您的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


推荐阅读