如何在golang上获取gocmq中断信号?

如何在golang上获取gocmq中断信号?,go,Go,**我使用goczmq,但在Windwos上运行服务器时,我不会捕捉到系统中断。为什么?** signal_channel := make(chan os.Signal) signal.Notify(signal_channel) go goczmq.... <-signal_channel signal\u信道:=make(信道信号) 信号通知(信号通道) 去吧。。。。 我做了一个快速的例子,似乎工作的预期 在a.go中有代码: package main import ( "os"

**我使用goczmq,但在Windwos上运行服务器时,我不会捕捉到系统中断。为什么?**

signal_channel := make(chan os.Signal)
signal.Notify(signal_channel)
go goczmq....
<-signal_channel
signal\u信道:=make(信道信号)
信号通知(信号通道)
去吧。。。。

我做了一个快速的例子,似乎工作的预期
在a.go中有代码

package main

import (
"os"
"os/signal"
"time"
"fmt"
)

func main() {

fmt.Println( "Started...")
signal_channel := make(chan os.Signal)
signal.Notify(signal_channel)
go func() {
    // do whatever...
    time.Sleep(10 *time.Second)
}()
sig1 := <-signal_channel
fmt.Println( "\n\nGot signal: ", sig1 )

fmt.Println( "Done.")

}
此外:

go run a.go  // + Press CTRL-Z
Started...
^Z
[1]+  Stopped                 go run a.go

Got signal:  stopped
Done.

如果在你的情况下,它是不可见的,可能是消耗在gorutine。 例如:

package main

import (
    "os"
    "os/signal"
    "time"
    "fmt"
)

func main() {

    fmt.Println( "Started...")
    signal_channel := make(chan os.Signal)
    signal.Notify(signal_channel)
    go func() {
        // do whatever...
        sig2 := <-signal_channel
        fmt.Println( "gorutine sig2: ", sig2)
        time.Sleep(10 *time.Second)
    }()

    time.Sleep(10 *time.Second)
    sig1 := <-signal_channel
    fmt.Println( "\n\nGot signal: ", sig1 )

    fmt.Println( "Done.")

}

谢谢,回复。但我将goczmq添加到示例中,它不适用于Windwos
> go run a.go // + Press CTRL-C 
Started...
^C

Got signal:  interrupt
Done.
package main

import (
    "os"
    "os/signal"
    "time"
    "fmt"
)

func main() {

    fmt.Println( "Started...")
    signal_channel := make(chan os.Signal)
    signal.Notify(signal_channel)
    go func() {
        // do whatever...
        sig2 := <-signal_channel
        fmt.Println( "gorutine sig2: ", sig2)
        time.Sleep(10 *time.Second)
    }()

    time.Sleep(10 *time.Second)
    sig1 := <-signal_channel
    fmt.Println( "\n\nGot signal: ", sig1 )

    fmt.Println( "Done.")

}
^Cgorutine sig2:  interrupt