[英]Can I map custom Abbreviations to a keyboard shortcut in Goland IDE?
[英]Goland: Debounce a struct map grouped by id
我试图弄清楚是否有办法消除按 id 分组的结构 map。
在此示例中使用以下结构:
type Message struct {
id int
attrs []string
}
这就是我创建列表的方式
messages := []Message{
Message{
id: 10,
attrs: []string{"blah", "foo"},
},
Message{
id: 10,
attrs: []string{"add", "ddsds"},
},
Message{
id: 11,
attrs: []string{"foo", "bar"},
},
Message{
id: 12,
attrs: []string{"xyz"},
},
}
然后变成按 id 分组的 map:
collections := make(map[int][]Message)
for _, j := range messages {
collections[j.id] = append(collections[j.id], j)
}
这是主要的function:
debounced := debounce.New(100 * time.Millisecond)
for _, messageMap := range collections {
for _, message := range messageMap {
debounced(func() {
fmt.Println("id", message.id, "attrs =>", message.attrs)
})
}
}
time.Sleep(500 * time.Millisecond)
output 是:
id 12 attrs => [xyz]
这是不正确的。 看起来它刚刚收到最后一条消息。
我让它工作。 我只需要在第一个循环之后等待:
debounced := debounce.New(100 * time.Millisecond)
for _, messageMap := range collections {
for _, message := range messageMap {
message := message // Copy the loop var
debounced(func() {
fmt.Println("id", message.id, "attrs =>", message.attrs)
})
}
time.Sleep(500 * time.Millisecond)
}
使用闭包,您可以捕获循环变量,每次迭代都会重写该变量。 捕获它的副本:
for _, message := range messageMap {
message:=message // Copy the loop var
debounced(func() {
fmt.Println("id", message.id, "attrs =>", message.attrs)
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.