未定义:syscall.SIGURG在工作代码上

问题描述

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

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上不存在。它存在于Debian之类的类Unix系统上。

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

已弃用:此软件包已被锁定。调用者应改为使用golang.org/x/sys存储库中的相应软件包。这也是应该应用新系统或版本所需的更新的地方。有关更多信息,请参见https://golang.org/s/go1.4-syscall

还有用于Windows的软件包golang.org/x/sys/windows,它不包括SIGURG,因为它在Windows上不存在。