「Go」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(序文を更新)
(→‎インストール: 情報を更新)
9行目: 9行目:
 
== インストール ==
 
== インストール ==
   
  +
{{pkg|go}} パッケージを [[インストール]] して下さい、これには標準の Go コンパイラーとその他の開発ツールが含まれています。含まれるサブコマンドのリストについては、[https://pkg.go.dev/cmd/go ''go'' コマンドのドキュメント] を参照してください。
今日 Go のコンパイラは2つ存在しており、どちらも[[公式リポジトリ]]から[[インストール]]できます:
 
   
  +
=== 代替コンパイラ ===
* '''go''': {{pkg|go}} で[[インストール]]できるコンパイルツールのインターフェイス
 
** コンパイルが高速
 
** 公式ツール (go get や go doc など)
 
** クロスコンパイル
 
   
* '''gccgo''': {{pkg|gcc-go}} で[[インストル]]できるコンパイラコレクションに含まれている ''gcc'' フロトエンド
+
{{pkg|go}} パッケジには、''gc'' と呼ばれ標準 Go コンパイラ含まれています。次代替コパイラも使用できます。
** goroutine がフルフローになる
 
** バイナリのサイズが小さい (動的リンク)
 
   
  +
==== gccgo ====
=== インストールのテスト ===
 
   
  +
[[GCC]] のフロントエンド [https://go.dev/doc/install/gccgo gccgo] は、{{pkg|gcc-go}} パッケージによって提供されます。''gccgo'' は、場合によっては ''gc'' より高速なバイナリを生成し、追加のオペレーティングシステムやアーキテクチャをターゲットにすることができます。[https://meltware.com/2019/01/16/gccgo-benchmarks-2019.html 実際には、ほぼすべてのワークロードにおいて、''gc'' は ''gccgo'' よりも高速なバイナリを生成します。]
Go が正しくインストールされたかは以下のような小さなプログラムをビルドして確認できます:
 
   
  +
==== TinyGo ====
{{hc|hello.go|
 
package main
 
   
  +
[https://tinygo.org/ TinyGo] は、組み込みシステムおよび WebAssembly 用の非常に小さなバイナリを生成するように設計された [[LLVM]] ベースのコンパイラです。これは、{{pkg|tinygo}} パッケージによって提供されます。
import "fmt"
 
   
  +
=== ツール ===
func main() {
 
fmt.Println("Hello, Arch!")
 
}
 
}}
 
   
  +
次のパッケージは Go 用の開発者ツールを提供します:
go ツールを使って実行:
 
{{hc|$ go run hello.go|
 
Hello, Arch!
 
}}
 
   
  +
* {{App|Go ツール|主に Go プログラムの静的解析のための様々なツールと Go パッケージ。|https://cs.opensource.google/go/x/tools|{{Pkg|go-tools}}}}
標準の ''gc'' コンパイラでコンパイル ({{ic|1=go build -compiler=gc hello.go}} と同じ):
 
  +
* {{App|gopls|公式 Go 言語サーバ|https://pkg.go.dev/golang.org/x/tools/gopls|{{Pkg|gopls}}}}
  +
* {{App|Delve|Go プログラミング言語のデバッガ。|https://github.com/go-delve/delve|{{Pkg|delve}}}}
  +
* {{App|go-bindata|任意のファイルから Go コードを生成する小さなユーティリティ。Go プログラムにバイナリデータを埋め込むのに便利です。|https://github.com/shuLhan/go-bindata|{{AUR|go-bindata}}, {{Pkg|go-bindata-hashicorp}}}}
  +
* {{App|GoReleaser|Go プロジェクト用のリリース自動化ツール |https://goreleaser.com/|{{Pkg|goreleaser}}}}
  +
* {{App|gox|複数のプラットフォームのビルドを並列化する Go クロスコンパイル用のツール。|https://github.com/mitchellh/gox|{{Pkg|gox}}}}
  +
* {{App|ko|Go アプリケーション用のコンテナイメージビルダ。|https://github.com/ko-build/ko|{{Pkg|ko}}}}
  +
* {{App|revive|高速、構成可能、拡張可能、柔軟で美しい Go 用 linter。|https://revive.run/|{{Pkg|revive}}}}
  +
* {{App|Staticcheck|Goプログラミング言語用の最先端のリンター。|https://staticcheck.io/|{{Pkg|staticcheck}}}}
  +
* {{App|Yaegi|Goインタプリタ。yaegi''コマンドラインインタープリタ /REPL を含みます。|https://github.com/traefik/yaegi|{{Pkg|yaegi}}}}
   
  +
=== インストールディレクトリ ===
$ go build hello.go
 
   
  +
{{ic|go install}} コマンドは、{{ic|GOBIN}} [[環境変数]] で指定されたディレクトリに Go 実行可能ファイルをインストールします。{{ic|GOBIN}} のデフォルトは {{ic|$GOPATH/bin}}、または {{ic|GOPATH}} 環境変数が設定されていない場合は {{ic|~/go/bin}} です。
''gccgo'' でコンパイル ({{ic|1=go build -compiler=gccgo hello.go}} と同じ):
 
   
  +
{{Tip|{{ic|go env}} を実行すると、すべての Go 変数を確認できます。}}
$ gccgo hello.go -o hello
 
   
  +
便宜上、bin サブディレクトリを {{ic|PATH}} に追加します:
=== $GOPATH ===
 
   
  +
$ export PATH="$PATH:$(go env GOBIN):$(go env GOPATH)/bin"
{{ic|import}} ステートメントなどで使用される、Go の依存パッケージは、{{ic|$GOPATH}} 変数、そして {{ic|$GOROOT}} (''go'' のインストールディレクトリ、デフォルトでは {{ic|/usr/lib/go}}) で検索されます。基本の {{ic|$GOROOT}} からだけでなく、外部の依存パッケージを使う場合は、{{ic|~/.bash_profile}} (もしくはそれに類する設定ファイル) にワークスペースを指定する必要があります:
 
   
  +
詳細については、[https://go.dev/doc/code Go コードの書き方] および {{ic|go help install}} を参照してください。
export GOPATH=~/go
 
 
{{Tip|{{ic|go env}} を実行することで Go の変数を確認できます。}}
 
 
ワークスペースを作成:
 
 
$ mkdir -p ~/go/{bin,src}
 
 
プロジェクトのソースの保存には {{ic|src}} ディレクトリが、実行可能ファイルには {{ic|bin}} が使われます。
 
 
また、{{ic|bin}} ディレクトリのパスを {{ic|$PATH}} [[環境変数]]に追加することで (Go 言語で書かれた) インストールしたプログラムを ({{ic|ls}} などと同じように) どこでも実行できるようになります:
 
 
export PATH="$PATH:$GOPATH/bin"
 
 
必要な実行可能ファイルが実行できるように {{ic|$PATH}} に {{ic|bin}} ディレクトリも追加します。
 
 
詳細は {{ic|go help gopath}} を実行してください。
 
 
=== 他のプラットフォームのクロスコンパイルを有効にする ===
 
 
公式パッケージは Linux の amd64, i386, arm アーキテクチャしかサポートしていません。Darwin, FreeBSD, MS Windows などのクロスコンパイルをサポートするには、下の手順に従ってください。
 
 
{{ic|$GOROOT_BOOTSTRAP}} を {{ic|/usr/lib/go}} に設定すると {{ic|/usr/lib/go/src}} をビルドできません。以下のような警告が出力されます。
 
 
$ cd /usr/lib/go/src
 
$ GOROOT_BOOTSTRAP=/usr/lib/go GOOS=darwin GOARCH=amd64 ./make.bash --no-clean
 
##### Building Go bootstrap tool.
 
cmd/dist
 
ERROR: $GOROOT_BOOTSTRAP must not be set to $GOROOT
 
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
 
 
この問題を回避するには、https://golang.org/ から Go のソースを入手してください。
 
 
{{Note|以下のコマンドでは、{{ic|~/downloads/go}} に Go をダウンロードして解凍したものとします。}}
 
 
ダウンロードした Go をビルド:
 
 
$ cd ~/downloads/go/src
 
$ GOROOT_BOOTSTRAP=/usr/lib/go GOOS=linux GOARCH=amd64 ./make.bash --no-clean
 
 
これでダウンロードした Go を使用して Go をビルドできるはずです。以下のコマンドでビルドしてください:
 
 
$ cd /usr/lib/go/src; for os in darwin freebsd windows; do for arch in amd64 386; do sudo GOROOT_BOOTSTRAP="$HOME/downloads/go" GOOS=$os GOARCH=$arch ./make.bash --no-clean; done; done
 
 
{{Note|上記のコマンドは Go パッケージをアップデートするたびに実行する必要があります。}}
 
 
詳細は {{Bug|30287}} を参照。
 
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==

2024年1月2日 (火) 14:01時点における版

Go は、Google がサポートするオープンソースプログラミング言語です。the Go documentation から:

Go は表現力豊かで、簡潔で、クリーンで効率的です。その同時実行メカニズムにより、マルチコアおよびネットワーク化されたマシンを最大限に活用するプログラムの作成が容易になり、また、その新しいタイプのシステムにより、柔軟なモジュール型プログラム構築が可能になります。Go はマシンコードに迅速にコンパイルされますが、ガベージコレクションの利便性と実行時リフレクションの機能を備えています。これは、動的に型付けされ解釈される言語のように感じられる、高速な静的型付けコンパイル言語です。

インストール

go パッケージを インストール して下さい、これには標準の Go コンパイラーとその他の開発ツールが含まれています。含まれるサブコマンドのリストについては、go コマンドのドキュメント を参照してください。

代替コンパイラ

go パッケージには、gc と呼ばれる標準 Go コンパイラが含まれています。次の代替コンパイラも使用できます。

gccgo

GCC のフロントエンド gccgo は、gcc-go パッケージによって提供されます。gccgo は、場合によっては gc より高速なバイナリを生成し、追加のオペレーティングシステムやアーキテクチャをターゲットにすることができます。実際には、ほぼすべてのワークロードにおいて、gcgccgo よりも高速なバイナリを生成します。

TinyGo

TinyGo は、組み込みシステムおよび WebAssembly 用の非常に小さなバイナリを生成するように設計された LLVM ベースのコンパイラです。これは、tinygo パッケージによって提供されます。

ツール

次のパッケージは Go 用の開発者ツールを提供します:

  • Go ツール — 主に Go プログラムの静的解析のための様々なツールと Go パッケージ。
https://cs.opensource.google/go/x/tools || go-tools
  • gopls — 公式 Go 言語サーバ
https://pkg.go.dev/golang.org/x/tools/gopls || gopls
  • Delve — Go プログラミング言語のデバッガ。
https://github.com/go-delve/delve || delve
  • go-bindata — 任意のファイルから Go コードを生成する小さなユーティリティ。Go プログラムにバイナリデータを埋め込むのに便利です。
https://github.com/shuLhan/go-bindata || go-bindataAUR, go-bindata-hashicorp
  • GoReleaser — Go プロジェクト用のリリース自動化ツール
https://goreleaser.com/ || goreleaser
  • gox — 複数のプラットフォームのビルドを並列化する Go クロスコンパイル用のツール。
https://github.com/mitchellh/gox || gox
  • ko — Go アプリケーション用のコンテナイメージビルダ。
https://github.com/ko-build/ko || ko
  • revive — 高速、構成可能、拡張可能、柔軟で美しい Go 用 linter。
https://revive.run/ || revive
  • Staticcheck — Goプログラミング言語用の最先端のリンター。
https://staticcheck.io/ || staticcheck
  • Yaegi — Goインタプリタ。yaegiコマンドラインインタープリタ /REPL を含みます。
https://github.com/traefik/yaegi || yaegi

インストールディレクトリ

go install コマンドは、GOBIN 環境変数 で指定されたディレクトリに Go 実行可能ファイルをインストールします。GOBIN のデフォルトは $GOPATH/bin、または GOPATH 環境変数が設定されていない場合は ~/go/bin です。

ヒント: go env を実行すると、すべての Go 変数を確認できます。

便宜上、bin サブディレクトリを PATH に追加します:

$ export PATH="$PATH:$(go env GOBIN):$(go env GOPATH)/bin"

詳細については、Go コードの書き方 および go help install を参照してください。

トラブルシューティング

Jetbrains の Go プラグイン

もし Jetbrains IDE を使用していて Go プラグインが Go SDK のパスを見つけられない場合、互換性のないパッケージを使用している可能性があります。gcc-go パッケージを削除し、go パッケージで置き換えてください。GOPATH が設定されている場合、IDE は /usr/lib/go に存在する Go SDK を認識します。

参照