我试图运行以下bar.go脚本
package main
import (
"fmt"
"syscall"
)
func main() {
fmt.Printf("%d\n", uintptr(syscall.ENONET))
}
通过调用
go run bar.go
并得到此错误:# command-line-arguments
./bar.go:9:29: undefined: syscall.ENONET
我正在使用Mac并转到
1.14.3 darwin/amd64
版本。我尝试在Go操场https://play.golang.org/p/ecMZPsGgGOa上运行此确切的脚本,并且该脚本有效。我尝试使用
CGO_ENABLED=1 GOOS=linux GOARCH=amd64
运行脚本,但收到此错误:fork/exec /var/folders/2l/dj6ph5t92y17vhtv3n6xzr5r0000gn/T/go-build847134732/b001/exe/bar: exec format error
如何使
syscall.ENONET
在Mac上运行?谢谢
最佳答案
是的,这有一些奇怪的问题。虽然,syscall现在已被锁定。
Deprecated: this package is locked down.
Callers should use the corresponding package in the golang.org/x/sys repository instead.
我尝试了
go version go1.14.3 darwin/amd64
,但是遇到了同样的问题。但是在文档中,我们有:
ENONET = Errno(0x40)
由于Errno也是导出类型,因此您可以显式模拟相同的行为:
package main
import (
"fmt"
"syscall"
)
func main() {
fmt.Printf("%d\n", syscall.Errno(0x40)) // 64
fmt.Printf("%v\n", syscall.Errno(0x40)) // host is down
}