Go lang保持功能活着

时间:2014-08-05 04:38:38

标签: while-loop go

我有一个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 {} 

    }
}

2 个答案:

答案 0 :(得分:7)

供将来参考:

保持函数活动的更好方法是使用空select语句,它将无限期地阻止Go例程。与空for语句相反,它不会消耗CPU时间。

select { }

答案 1 :(得分:6)

只需使用标准&#34; Go way&#34;。您可以通过频道range直到关闭它:

for sid := range channel {
    // do stuff
}

它将一直持续到通道关闭为止。添加&#34;等待循环&#34;这就是在寻找麻烦。