Edited at

Goで`uname -m`の値を取得する

More than 3 years have passed since last update.

$ uname -m

x86_64

みたいなやつ。

syscall.Uname()syscall.Utsnameを取得し、そのうちのMachineを文字列として取得する。


main.go

package main

import (
"fmt"
"os"
"syscall"
)

func main() {
m, err := machine()
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}

fmt.Println(m)
os.Exit(0)
}

func machine() (string, error) {
u := syscall.Utsname{}
err := syscall.Uname(&u)
if err != nil {
return "", err
}

var m string
for _, val := range u.Machine {
m += string(int(val))
}

return m, nil
}


なおsyscall.Unameおよびsyscall.Utsnameの実装はOSに依存しており、Linuxでは動くけどWindowsやOSX、BSDなどではそもそもこのコードのビルドが通らない。

なので複数OSを前提としたコードを書くなら、syscall.Unamesyscall.Utsnameを呼び出す部分はOSごとにファイルを切り分けるなのの必要が出てくる。


参考