我在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有出错的吗?
发布于 2015-04-02 23:54:35
TL;DR Uname和Utsname不适用于OSX。
原因是没有为操作系统定义这些函数。
在阅读syscall的文档时,我突然想到:
的详细信息根据底层系统的不同而不同,默认情况下,godoc将显示当前系统的syscall文档。如果希望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
发布于 2021-06-09 11:07:17
(添加一个更直接的答案,确切地说明我是如何解决这个问题的)
我没有导入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)https://stackoverflow.com/questions/29415909
复制相似问题