2015-04-02 9 views
1

Я использую golang 1.4.2 на MacНе удается получить Uname от golang

Я хочу использовать 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 

Все пошло не так?

+1

Это не выглядит, как вы делаете что-то неправильно. Можете ли вы убедиться, что ваша версия Go - 1.4.2, запустив 'go version'? – fuz

+1

проверить 'go env' тоже, убедившись, что GOARCH и GOOS верны. – JimB

+0

Я получил 'go версию go1.4.2 darwin/amd64'' go version' – waitingkuo

ответ

6

TL; DRUname и Utsname не доступны для OSX.

Причина в том, что эти функции не определены для операционной системы.

Чтение документации для syscall это прыгнули на меня:

Детали различаются в зависимости от основной системы, и по умолчанию, godoc будет отображать документацию для системного вызова текущей системы. Если вы хотите, чтобы Godoc отображал документацию для системной записи для другой системы, установите $ GOOS и $ GOARCH в нужную систему.

Запуск godoc syscall на моем Mac давал sycall документации, которая не включает в себя Utsname типа вызов, ни в Uname функции.

Однако, работающий GOOS=linux GOARCH=amd64 godoc syscall фактически показывает Utsname и Uname.

Кроме того, обратите внимание, что сам пакет заблокирован в пользу ОС конкретных пакетов

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

+0

Спасибо, я посмотрю на 'https: // godoc.org/golang.org/x/sys' – waitingkuo