我有一个go函数,它会在Channel收到一些逻辑之后做一些逻辑。
我的问题是我希望函数在完成逻辑后保持活着状态。我的想法是
我将在函数中添加无限循环。但是,我想知道这是否是
一项很好的技巧。我的守则如下:
func process(channel chan string, sid string) {
inputSid := <-channel
// check if sid exist in process pool
if strings.EqualFold(sid, inputSid) {
fmt.Println("Got message", sid)
//the code that I added to make this function alive
for {}
} else {
channel <- sid
//the code that I added to make this function alive
for {}
}
}
答案 0 :(得分:7)
供将来参考:
保持函数活动的更好方法是使用空select
语句,它将无限期地阻止Go例程。与空for
语句相反,它不会消耗CPU时间。
select { }
答案 1 :(得分:6)
只需使用标准&#34; Go way&#34;。您可以通过频道range
直到关闭它:
for sid := range channel {
// do stuff
}
它将一直持续到通道关闭为止。添加&#34;等待循环&#34;这就是在寻找麻烦。