2

我在 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

有没有出错?

4

2 回答 2

8

TL;DR Uname并且Utsname不适用于 OSX。

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

阅读这方面的文档让syscall我大吃一惊:

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

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

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

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

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

于 2015-04-02T15:54:35.337 回答
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)
于 2021-06-09T03:07:17.330 回答