Syscall常量syscall.ENONET在Go中未定义

问题描述 投票:0回答:1

我尝试运行以下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。我尝试在[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

如何在Mac上使用syscall.ENONET

谢谢

macos go system-calls
1个回答
0
投票

是的,这有一些奇怪的问题。尽管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
}
© www.soinside.com 2019 - 2024. All rights reserved.