我在Mac上使用golang 1.4.2
我想使用Uname获取一些信息,以下是我的代码:
package main
import (
"syscall"
)
func main() {
utsname := syscall.Utsname{}
syscall.Uname(&utsname)
}
但我收到了这些错误:
# command-line-arguments
./main.go:8: undefined: syscall.Utsname
./main.go:9: undefined: syscall.Uname
出了什么问题?
答案 0 :(得分:7)
TL; DR Uname
和Utsname
不适用于OSX。
原因是因为没有为操作系统定义这些功能。
阅读syscall
这个跳过我的文档:
详细信息因底层系统而异,默认情况下,godoc将显示当前系统的系统调用文档。如果您希望godoc显示另一个系统的系统调用文档,请将$ GOOS和$ GOARCH设置为所需的系统。
在我的Mac上运行godoc syscall
,产生了sycall
文档,其中不包含Utsname
类型和Uname
函数调用。
但是,正在运行GOOS=linux GOARCH=amd64 godoc syscall
实际上会显示Utsname
和Uname
。
另请注意,软件包本身已被锁定,以支持特定于操作系统的软件包
https://golang.org/pkg/syscall/ => https://godoc.org/golang.org/x/sys
答案 1 :(得分:0)
(添加一个更直接的答案,说明我是如何解决这个问题的)
我没有导入 syscall
,而是导入了 golang.org/x/sys/unix
。
然后,以下代码块:
u := syscall.Utsname{}
syscall.Uname(&u)
被替换为:
u := unix.Utsname{}
unix.Uname(&u)
注意!需要调用Windows的相关函数。
git diff
的相关内容:
- "syscall"
+ "golang.org/x/sys/unix"
- utsname := syscall.Utsname{}
- syscall.Uname(&utsname)
+ utsname := unix.Utsname{}
+ unix.Uname(&utsname)