未定义:syscall.SIGURG 工作代码

undefined: syscall.SIGURG on a working code

我是新手,目前正在尝试理解同事编写的一些代码

go func() {
    s := <-sigs
    if s == syscall.SIGURG {
        fmt.Println("received sigur")
    } else {
        log.Printf("RECEIVED SIGNAL: %s", s)
        os.Exit(1)
    }
}()

我同时使用了 GoLand 和 VSCode,而这两个 IDE 在 if s == syscall.SIGURG { 上报告了错误 他们扔 undefined: syscall.SIGURG

事实是,我知道这段代码适用于 Debian。所以我正在尝试为什么它不能在我的 Windows 计算机

上运行

虽然我有所需的导入:

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

正如@Volker 在评论中所写,SIGURG 在 Windows 上不存在。它存在于 Unix-like 系统上,例如 Debian。

我相信如果您将代码更改为使用 golang.org/x/sys/unix 而不是 syscall,这种行为对您来说会更加明显。 syscall 包的 Golang 文档有 the following deprecation notice:

Deprecated: this package is locked down. Callers should use the corresponding package in the golang.org/x/sys repository instead. That is also where updates required by new systems or versions should be applied. See https://golang.org/s/go1.4-syscall for more information.

还有 Windows 的包 golang.org/x/sys/windows,它不包含 SIGURG,因为它不存在于 Windows。