首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过golang获取Uname

无法通过golang获取Uname
EN

Stack Overflow用户
提问于 2015-04-02 22:48:08
回答 2查看 3K关注 0票数 2

我在Mac上使用golang 1.4.2

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

代码语言:javascript
复制
package main

import (
  "syscall"
)

func main() {
  utsname := syscall.Utsname{}
  syscall.Uname(&utsname)
}

但我得到了以下错误:

代码语言:javascript
复制
# command-line-arguments
./main.go:8: undefined: syscall.Utsname
./main.go:9: undefined: syscall.Uname

有出错的吗?

EN

回答 2

Stack Overflow用户

发布于 2015-04-02 23:54:35

TL;DR UnameUtsname不适用于OSX。

原因是没有为操作系统定义这些函数。

在阅读syscall的文档时,我突然想到:

的详细信息根据底层系统的不同而不同,默认情况下,godoc将显示当前系统的syscall文档。如果希望godoc显示另一个系统的系统调用文档,请将$GOOS和$GOARCH设置为所需的系统。

在我的Mac上运行godoc syscall会得到sycall文档,其中既不包含Utsname类型,也不包含Uname函数调用。

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

另外,请注意,软件包本身已锁定,以支持特定于操作系统的软件包

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

票数 8
EN

Stack Overflow用户

发布于 2021-06-09 11:07:17

(添加一个更直接的答案,确切地说明我是如何解决这个问题的)

我没有导入syscall,而是导入了golang.org/x/sys/unix

然后,执行以下代码块:

代码语言:javascript
复制
u := syscall.Utsname{}
syscall.Uname(&u)

替换为:

代码语言:javascript
复制
u := unix.Utsname{}
unix.Uname(&u)

注意!您需要调用Windows的相关函数。

git diff的相关内容

代码语言:javascript
复制
-       "syscall"
+       "golang.org/x/sys/unix"

-       utsname := syscall.Utsname{}
-       syscall.Uname(&utsname)
+       utsname := unix.Utsname{}
+       unix.Uname(&utsname)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29415909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档