LoginSignup
3
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-04-27
$ 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ごとにファイルを切り分けるなのの必要が出てくる。

参考

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3