为什么循环中赋值后的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,还是一样的

慕容森
浏览 172回答 2
2回答

临摹微笑

您的make电话正在创建一个初始长度为 5 的 Philosopher 切片。从规范中:使用内置函数 为给定元素类型 T 创建一个新的初始化切片值,该函数make接受切片类型和指定长度和可选容量的参数。使用 make 创建的切片总是分配一个新的隐藏数组,返回的切片值指向该数组。也就是说,执行make([]T,&nbsp;length,&nbsp;capacity)前 5 位哲学家是哲学家的零值。您将另外 5 个 Philosophers 附加到切片的末尾,使其最终长度为 10。我相信你的意思是创建一个长度为 0 但容量为 5 的切片:table&nbsp;:=&nbsp;make([]Philosopher,&nbsp;0,&nbsp;numPhil)https://play.golang.org/p/a5QP6wd6Rs_9

桃花长相依

因为这:table&nbsp;:=&nbsp;make([]Philospher,&nbsp;numPhil)这table使用numPhil空元素创建。然后你将你Philosohper的 s 添加到这个空表的末尾,并打印前 5 个。显然,numPhil >= 5,所以它打印出第一个空表。将初始化更改为:table:=&nbsp;make([]Philosopher,0,numPhil)为 numPhil 元素保留空间,大小为 0。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go