第一种写法
func (bus *es) PublicAll(topics []*EventTopic) {
for _, topic := range topics {
bus.mutex.Lock()
h, ok := bus.handlers[topic.Topic]
bus.mutex.Unlock()
if !ok {
continue
}
bus.client.Subscribe(topic.Topic, byte(topic.QoSValue), func(c mqtt.Client, m mqtt.Message) {
go func(h EventHandler) {
defer func() {
if err := recover(); err != nil {
fmt.Printf("goroutine panic: %+v \r\n", err)
}
}()
h(topic.Topic, m)
}(h)
})
}
}
第二种写法
func (bus *es) PublicAll(topics []*EventTopic) {
for _, topic := range topics {
bus.mutex.Lock()
h, ok := bus.handlers[topic.Topic]
bus.mutex.Unlock()
if !ok {
continue
}
go func(h EventHandler) {
defer func() {
if err := recover(); err != nil {
fmt.Printf("goroutine panic: %+v \r\n", err)
}
}()
bus.client.Subscribe(topic.Topic, byte(topic.QoSValue), func(c mqtt.Client, m mqtt.Message) {
h(topic.Topic, m)
})
}(h)
}
}
请问下上面两种写法,哪一种更好,为什么?除了以上方法还有其他更好的实现?感谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.