プラットフォーム固有情報
プラットフォーム別の 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 でのインストール
- 公式サイト から Windows インストーラーをダウンロード
- インストーラーを実行
- 環境変数が自動的に設定される
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 を使用するコード
// プラットフォーム固有のライブラリとリンク可能
}
トラブルシューティング
一般的な問題
- パス区切り文字:
filepath
パッケージを使用 - 改行文字: プラットフォーム固有の改行コードに注意
- ファイル権限: Unix系では実行権限が必要
- 大文字小文字: 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 アプリケーションを開発するために、対象プラットフォームの特性を理解し、適切に対応することが重要です。