问题描述
我是新来的,目前正在尝试了解同事编写的一些代码
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上不存在。