2.1 プラットフォームとアーキテクチャ#
Go 言語の開発チームは、以下のオペレーティングシステム用のコンパイラを開発しました:
- Linux
- FreeBSD
- Mac OS X(または Darwin とも呼ばれます)
現在、2 つのバージョンのコンパイラがあります:Go ネイティブコンパイラ gc と非ネイティブコンパイラ gccgo です。これらのコンパイラはどちらも Unix 系のシステムで動作します。gc バージョンのコンパイラは Windows プラットフォームにも移植されており、主要なディストリビューションに統合されています。また、MinGW をインストールすることで Windows プラットフォームで gcc コンパイラを使用することもできます。これらのコンパイラは、シングルチャネルで動作します。
以下のプラットフォームで Go 1.4 のソースコードとバイナリファイルを取得できます:
- Linux 2.6+:amd64、386、および arm アーキテクチャ
- Mac OS X(Snow Leopard + Lion):amd64 および 386 アーキテクチャ
- Windows 2000+:amd64 および 386 アーキテクチャ
非常に低レベルの純粋な Go 言語のコードやパッケージの場合、各オペレーティングシステムプラットフォームでの移植性は非常に強力です。ソースコードを対応するプラットフォームにコピーしてコンパイルするだけで動作します。または、クロスコンパイルを使用してターゲットプラットフォームのアプリケーションをビルドすることもできます。ただし、cgo やファイル監視システムのようなソフトウェアを使用する場合は、状況に応じて適切な変更を加える必要があります。
-
Go ネイティブコンパイラ gc:
これは、Ken Thompson が以前 Plan 9 オペレーティングシステムで使用していた C ツールチェーンに基づいています。
Go 言語のコンパイラとリンカは、C 言語で書かれ、ネイティブコードを生成するようになっています。Go には自己ブートストラップなどの機能はありません。したがって、異なる命令セットを持つコンパイラを使用して Go プログラムをビルドする場合は、オペレーティングシステムとプロセッサアーキテクチャ(32 ビットまたは 64 ビット)に応じて異なる処理をする必要があります。( Translator's note: Go has implemented self-bootstrapping since version 1.5. The Go compiler and linker are written in Go)
このコンパイラは、非世代、非圧縮、並列の方式でコンパイルされます。gccgo よりも高速で、より良いネイティブコードを生成しますが、コンパイル後のプログラムは gcc を使用してリンクすることはできません。
コンパイラは現在、以下の Intel または AMD プロセッサアーキテクチャをサポートしています。
図2.1 gcコンパイラがサポートするプロセッサアーキテクチャ
この命名システムを初めて見たとき、奇妙に思うかもしれませんが、これらの命名は Plan 9 プロジェクトから来ています。
g = コンパイラ:ソースコードをプロジェクトコード(プログラムテキスト)にコンパイルする l = リンカ:プロジェクトコードを実行可能なバイナリファイル(マシンコード)にリンクする
(関連する C コンパイラの名前は 6c、8c、5c で、関連するアセンブラの名前は 6a、8a、5a です)
フラグ(Flags) は、コンパイラやリンカのビルドプロセスに影響を与えたり、特別な目標結果を得るためにコマンドラインで設定可能なオプションパラメータです。
使用可能なコンパイラフラグは次のとおりです:
flags: -I パッケージのディレクトリを検索する -d 宣言情報を出力する -e エラーメッセージの制限を解除する -f スタックトレースを出力する -h エラーが発生した場合にパニック状態にする -o 出力ファイル名を指定する // 詳細は3.4節を参照 -S 生成されたアセンブリコードを出力する -V コンパイラのバージョンを出力する // 詳細は2.3節を参照 -u unsafeパッケージのコードを使用しない -w 分類された構文解析木を出力する -x lexトークンを出力する
Go 1.0.3 以降、
8g
、8l
などの命令はプログラムのビルドに使用されず、代わりにgo build
やgo install
などの統一されたコマンドが使用されます。これらのコマンドは自動的に関連するコンパイラやリンカを呼び出します。 -
gccgo コンパイラ:
gc に比べてより伝統的なコンパイラであり、バックエンドに GCC を使用しています。GCC は非常に人気のある GNU コンパイラであり、多くのプロセッサアーキテクチャを対象としたアプリケーションをビルドすることができます。コンパイル速度は gc よりも遅いですが、生成されるネイティブコードの実行は少し高速です。また、C 言語との相互運用性も提供しています。
Go 1 以降、gc と gccgo はコンパイルの面で同等の機能を持っています。
-
ファイルの拡張子とパッケージ:
Go 言語のソースファイルの拡張子は明らかに
.go
です。C ファイルの拡張子は
.c
、アセンブリファイルの拡張子は.s
です。すべてのソースコードファイルはパッケージ(packages)によって組織化されます。実行可能なコードを含むパッケージファイルは、圧縮された後に.a
(AR ドキュメント)の拡張子を使用します。Go 言語の標準ライブラリのパッケージファイルは、この形式のファイルとしてインストールされます。
注意 ディレクトリを作成する際には、フォルダ名にスペースを含めないでください。代わりにアンダースコア "_" や他の一般的な記号を使用してください。