不能通过golang获得Uname

wai*_*kuo 2 system-calls uname go

我在Mac上使用golang 1.4.2

我想使用Uname获取一些信息,以下是我的代码:

package main

import (
  "syscall"
)

func main() {
  utsname := syscall.Utsname{}
  syscall.Uname(&utsname)
}
Run Code Online (Sandbox Code Playgroud)

但我得到了这些错误:

# command-line-arguments
./main.go:8: undefined: syscall.Utsname
./main.go:9: undefined: syscall.Uname
Run Code Online (Sandbox Code Playgroud)

出了什么问题?

Leo*_*rea 7

TL; DR UnameUtsname不适用于OSX.

原因是因为没有为操作系统定义这些功能.

阅读syscall这篇文章让我感到高兴:

细节因底层系统而异,默认情况下,godoc将显示当前系统的系统调用文档.如果您希望godoc显示另一个系统的系统调用文档,请将$ GOOS和$ GOARCH设置为所需的系统.

godoc syscall在我的Mac上运行产生的sycall文档不包括Utsname类型和Uname函数调用.

但是,运行GOOS=linux GOARCH=amd64 godoc syscall实际显示UtsnameUname.

另请注意,程序包本身已被锁定,以支持特定于操作系统的程序包

https://golang.org/pkg/syscall/ => https://godoc.org/golang.org/x/sys