我有一個帶有名稱,IP和狀態(tài)字段的結(jié)構(gòu);我有一個設(shè)備列表;我想每2秒(或任何其他時間,就此而言)迭代該列表并更改“狀態(tài)”字段:Devicetype Device struct { Name string IP string Status bool}// One device is enough to explain the problemvar devices = []Device{ Device{Name: "phone", IP: "192.168.1.58", Status: false},}func main() { for range time.Tick(2 * time.Second) { for _, j := range devices { fmt.Printf("%s: %v\n", j.Name, j.Status) j.Status = true fmt.Printf("%s: %v\n--------\n", j.Name, j.Status) } }}我預計輸出是phone: falsephone: true------phone: truephone: true------phone: truephone: true------...但相反,我得到了phone: falsephone: true--------phone: falsephone: true--------...基本上,狀態(tài)值在每次迭代時都會重置。如果我將設(shè)備移到列表之外,它將按預期工作,如下所示:var j = Device{Name: "phone", IP: "192.168.1.58", Status: false}for range time.Tick(2 * time.Second) { fmt.Printf("%s: %v\n", j.Name, j.Status) j.Status = true fmt.Printf("%s: %v\n--------\n", j.Name, j.Status)}我做錯了什么?
1 回答

蝴蝶刀刀
TA貢獻1801條經(jīng)驗 獲得超8個贊
您可以按照建議將切片類型更改為指針@Marc;或者,您可以直接通過其索引更新切片:
for i := range devices { devices[i].Status = true}
- 1 回答
- 0 關(guān)注
- 101 瀏覽
添加回答
舉報
0/150
提交
取消