プラットフォーム固有情報

プラットフォーム固有情報

プラットフォーム別の Go 対応状況と特定の要件について説明します。

最小要件

現在の Go ポートの最小プラットフォーム要件については、MinimumRequirements を参照してください。

Go を新しいプラットフォームに移植することを検討していますか?まず 移植ポリシー を読んでください。

主要プラットフォーム

Linux

Linux - Linux での Go の使用に関する詳細情報。

サポートされているディストリビューション

  • Ubuntu(LTS版を推奨)
  • Debian
  • CentOS/RHEL
  • Fedora
  • Arch Linux
  • Alpine Linux

Ubuntu での Go

Ubuntu - Ubuntu での Go インストールと設定の詳細。

# Ubuntu での Go インストール
sudo apt update
sudo apt install golang-go

# 最新版を使用する場合
sudo snap install go --classic

Windows

Windows - Windows での Go の使用に関する情報。

Windows でのインストール

  1. 公式サイト から Windows インストーラーをダウンロード
  2. インストーラーを実行
  3. 環境変数が自動的に設定される

Windows でのビルド

WindowsBuild - Windows 上でのビルドプロセス。

Windows クロスコンパイル

WindowsCrossCompiling - 他のプラットフォームから Windows 用にクロスコンパイル。

# Linux/macOS から Windows 向けにビルド
GOOS=windows GOARCH=amd64 go build -o myapp.exe

Windows DLL

WindowsDLLs - Windows での DLL 作成と使用。

# Windows DLL の作成
go build -buildmode=c-shared -o mylib.dll

macOS (Darwin)

Darwin - macOS での Go の使用に関する情報。

macOS でのインストール

# Homebrew を使用
brew install go

# 公式インストーラーも利用可能
# https://go.dev/dl/ からダウンロード

Apple Silicon (M1/M2) サポート

Go 1.16 以降、ARM64 macOS をネイティブサポート:

# アーキテクチャの確認
go version
# output: go version go1.21.0 darwin/arm64

Unix系プラットフォーム

FreeBSD

FreeBSD - FreeBSD での Go の使用。

# FreeBSD での Go インストール
pkg install go

OpenBSD

OpenBSD - OpenBSD での Go の使用。

# OpenBSD での Go インストール
pkg_add go

NetBSD

NetBSD - NetBSD での Go の使用。

DragonFly BSD

DragonFly BSD での Go サポート。

Solaris

Solaris - Solaris/Illumos での Go の使用。

Plan 9

Plan 9 - Plan 9 オペレーティングシステムでの Go。

特殊プラットフォーム

ChromeOS

ChromeOS - ChromeOS での Go 開発環境の構築。

# Linux 開発環境(Crostini)を有効化
# その後、Debian/Ubuntu の手順に従う
sudo apt update
sudo apt install golang-go

ARM プラットフォーム

Go on ARM - ARM プロセッサでの Go の実行。

サポートされている ARM バリアント

  • ARMv6 (Raspberry Pi 1)
  • ARMv7 (Raspberry Pi 2/3/4)
  • ARM64 (Raspberry Pi 4、Apple Silicon)
# ARM 向けクロスコンパイル
GOOS=linux GOARCH=arm GOARM=7 go build

# ARM64 向けクロスコンパイル
GOOS=linux GOARCH=arm64 go build

モバイルプラットフォーム

Mobile - モバイル開発について。

Go Mobile

# Go Mobile のインストール
go install golang.org/x/mobile/cmd/gomobile@latest
gomobile init

# Android APK の作成
gomobile build -target=android .

# iOS アプリの作成
gomobile build -target=ios .

Android での Go

// Android アプリでの Go パッケージ使用例
package hello

import "fmt"

func Greetings(name string) string {
    return fmt.Sprintf("Hello, %s!", name)
}

iOS での Go

// iOS フレームワークとしてビルド
// gomobile bind -target=ios .

プラットフォーム固有の考慮事項

ファイルパス

import (
    "path/filepath"
    "runtime"
)

func platformSpecificPath() string {
    if runtime.GOOS == "windows" {
        return filepath.Join("C:", "Users", "username", "data")
    }
    return filepath.Join("/", "home", "username", "data")
}

実行ファイル拡張子

func executableName(name string) string {
    if runtime.GOOS == "windows" {
        return name + ".exe"
    }
    return name
}

システムコール

// +build linux

package main

import (
    "golang.org/x/sys/unix"
)

func linuxSpecificFunction() {
    // Linux 固有のシステムコール
    unix.Syscall(...)
}

ビルドタグ

// +build windows

package main

// Windows でのみビルドされるコード

// +build linux darwin

package main

// Linux と macOS でのみビルドされるコード

// +build !windows

package main

// Windows 以外でビルドされるコード

パフォーマンス考慮事項

プラットフォーム別最適化

// アーキテクチャ固有の最適化
func optimizedFunction() {
    switch runtime.GOARCH {
    case "amd64":
        // x86-64 最適化
    case "arm64":
        // ARM64 最適化
    default:
        // 汎用実装
    }
}

CGO とプラットフォーム

// +build cgo

package main

/*
#include <stdlib.h>
*/
import "C"

func useCGO() {
    // CGO を使用するコード
    // プラットフォーム固有のライブラリとリンク可能
}

トラブルシューティング

一般的な問題

  1. パス区切り文字: filepath パッケージを使用
  2. 改行文字: プラットフォーム固有の改行コードに注意
  3. ファイル権限: Unix系では実行権限が必要
  4. 大文字小文字: macOS は大文字小文字を区別しない場合がある

デバッグ情報

import (
    "fmt"
    "runtime"
)

func platformInfo() {
    fmt.Printf("OS: %s\n", runtime.GOOS)
    fmt.Printf("Arch: %s\n", runtime.GOARCH)
    fmt.Printf("CPUs: %d\n", runtime.NumCPU())
    fmt.Printf("Go version: %s\n", runtime.Version())
}

各プラットフォームには独自の特性があります。効果的な Go アプリケーションを開発するために、対象プラットフォームの特性を理解し、適切に対応することが重要です。