Files
build-web-application-with-…/ja/01.3.md
2014-12-14 23:27:42 +08:00

11 KiB
Raw Blame History

1.3 Goのコマンド

Goのコマンド

Go言語は完全なコマンド操作ツールセットを持つ言語です。コマンドラインでgoを実行することでそれらを確認することができます:

図1.3 Goコマンドで詳細情報を表示

これらのコマンドは我々が普段コードを書いている時に非常に役立つものです。次に普段使用するコマンドを理解していきましょう。

go build

このコマンドは主にコンパイルテストに用いられます。パッケージのコンパイル作業中、もし必要であれば、同時に関連パッケージもコンパイルすることができます。

  • もし普通のパッケージであれば、我々が1.2章で書いたmypathパッケージのように、go buildを実行したあと、何のファイルも生成しません。もし$GOPATH/pkgの下に対応するファイルを生成する必要があれば、go installを実行してください。

  • もしそれがmainパッケージであれば、go buildを実行したあと、カレントディレクトリの下に実行可能ファイルが生成されます。もし$GOPATH/binの下に対応するファイルを生成する必要があれば、go installを実行するか、go build- o パス/a.exeを実行してください。

  • もしあるプロジェクトディレクトリに複数のファイルがある場合で、単一のファイルのみコンパイルしたい場合は、go buildを実行する際にファイル名を追加することができます。例えばgo build a.goです。go buildコマンドはデフォルトでカレントディレクトリにある全てのgoファイルをコンパイルしようと試みます。

  • コンパイル後に出力されるファイル名を指定することもできます。1.2章のmathappアプリケーションではgo build -o astaxie.exeと指定できます。デフォルトはpackage名mainパッケージではないになるか、ソースファイルのファイル名mainパッケージになります。

実際はpackage名はGo言語の規格においてコード中の"package"に続く名前になります。この名前はファイル名と異なっていても構いません。デフォルトで生成される実行可能ファイル名はディレクトリ名。

  • go buildはディレクトリ内の"_"または"."ではじまるgoファイルを無視します。

  • もしあなたのソースコードが異なるオペレーティングシステムに対応する場合は異なる処理が必要となります。ですので異なるオペレーティングシステムの名称にもとづいてファイルを命名することができます。例えば配列を読み込むプログラムがあったとして、異なるオペレーティングシステムに対して以下のようなソースファイルがあるかもしれません。

    array_linux.go array_darwin.go array_windows.go array_freebsd.go

go buildの際、システム名の末尾のファイルから選択的にコンパイルすることができますLinux、Darwin、Windows、Freebsd

go clean

このコマンドは現在のソースコードパッケージのなかでコンパイラが生成したファイルを取り除く操作を行います。これらのファイルはすなわち:

_obj/            旧objectディレクトリ、MakeFilesが作成する。
_test/           旧testディレクトリMakefilesが作成する。
_testmain.go     旧gotestファイルMakefilesが作成する。
test.out         旧testログMakefilesが作成する。
build.out        旧testログMakefilesが作成する。
*.[568ao]        objectファイルMakefilesが作成する。

DIR(.exe)        go buildが作成する。
DIR.test(.exe)   go test -cが作成する。
MAINFILE(.exe)   go build MAINFILE.goが作成する。

私は基本的にこのコマンドを使ってコンパイルファイルを掃除します。ローカルでテストを行う場合これらのコンパイルファイルはシステムと関係があるだけで、コードの管理には必要ありません。

go fmt

読者にC/C++の経験があればご存知かもしれませんが、コードにK&Rスタイルを選択するかANSIスタイルを選択するかは常に論争となっていました。goでは、コードに標準のスタイルがあります。すでに培われた習慣やその他が原因となって我々は常にANSIスタイルまたはその他のより自分にあったスタイルでコードを書いて来ました。これは他の人がコードを閲覧する際に不必要な負担を与えます。そのためgoはコードのスタイルを強制し例えば左大括弧はかならず行末に置く、このスタイルに従わなければコンパイルが通りません。整形の時間の節約するため、goツールはgo fmtコマンドを提供しています。これはあなたの書いたコードを整形するのに役立ちます。あなたの書いたコードは標準のスタイルに修正されますが、我々は普段このコマンドを使いません。なぜなら開発ツールには一般的に保存時に自動的に整形を行ってくれるからです。この機能は実際には低レイヤではgo fmtを呼んでいます。この次の章で2つのツールをご紹介しましょう。この2つのツールはどれもファイルを保存する際にgo fmt機能を自動化させます。

go fmtコマンドの使用では、多くの場合はgofmtを使用しますが、-wオプションが必要になります。さもなければ、整形結果はファイルに書き込まれません。gofmt -w src、ですべての項目を整形することができます。

go get

このコマンドは動的にリモートコードパッケージを取得するために用いられます。現在BitBucket、GitHub、Google CodeとLaunchpadをサポートしています。このコマンドは内部で実際には2ステップの操作に分かれます第1ステップはソースコードパッケージのダウンロード、第2ステップはgo installの実行です。ソースコードパッケージのダウンロードを行うgoツールは異なるドメインにしたがって自動的に異なるコードツールを用います。対応関係は以下の通りです

BitBucket (Mercurial Git)
GitHub (Git)
Google Code Project Hosting (Git, Mercurial, Subversion)
Launchpad (Bazaar)

そのため、go getを正常に動作させるためには、あらかじめ適切なソースコード管理ツールがインストールされていると同時にこれらのコマンドがあなたのPATHに入っていなければなりません。実はgo getはカスタムドメインの機能をサポートしています。具体的な内容はgo help remoteを参照ください。

go install

このコマンドは実際には内部で2ステップの操作に分かれます。第1ステップはリザルトファイルの生成実行可能ファイルまたはaパッケージ、第2ステップはコンパイルし終わった結果を$GOPATH/pkgまたは$GOPATH/binに移動する操作です。

go test

このコマンドを実行すると、ソースコードディレクトリ以下の*_test.goファイルが自動的にロードされ、テスト用の実行可能ファイルが生成/実行されます。出力される情報は以下のようなものになります

ok   archive/tar   0.011s
FAIL archive/zip   0.022s
ok   compress/gzip 0.033s
...

デフォルトの状態で、オプションを追加する必要はありません。自動的にあなたのソースコードパッケージ以下のすべてのtestファイルがテストされます。もちろんオプションを追加しても構いません。詳細はgo help testflagを確認してください。

go doc

(1.2rc1 から go doc コマンドはなくなり、 godoc コマンドのみになります) 多くの人がgoはいかなるサードパーティドキュメントも必要としないと言っています。なぜなら例えばchmマニュアルのようにもっとも私はすでにchmマニュアルを作っていますが)、この中にすでに非常に協力なドキュメントツールが入っているからです。

どのように対応するpackageのドキュメントを確認すればよいでしょうか 例えばbuiltinパッケージであれば、go doc builtinと実行します。 もしhttpパッケージであれば、go doc net/httpと実行してください。 パッケージの中の関数を確認する場合はgodoc fmt Printfとしてください。 対応するコードを確認する場合は、godoc -src fmt Printfとします。

コマンドラインでコマンドを実行します。 godoc -http=:ポート番号 例えばgodoc -http=:8080として、ブラウザで127.0.0.1:8080を開くと、golang.orgのローカルのcopy版を見ることができます。これを通してpkgドキュメントなどの他の内容を確認することができます。もしあなたがGOPATHを設定されていれば、pkgカテゴリの中で、標準パッケージのドキュメントのみならず、ローカルのGOPATHのすべての項目に関連するドキュメントをリストアップすることができます。これはグレートファイアーウォールの中にいるユーザにとっては非常にありがたい選択です。

その他のコマンド

goは他にも様々なツールを提供しています。例えば以下のツール

    go fix は以前の古いバージョンのコードを新しいバージョンに復元するために使われます。例えばgo1の前の古いバージョンのコードをgo1に移動させます。
    go version はgoの現在のバージョンを確認します。
    go env は現在のgoの環境変数を確認します。
    go list は現在インストールされている全てのpackageをリストアップします。
    go run はGoプログラムのコンパイルと実行を行います。

以上これらのツールはまだ多くのオプションがあり、ひとつひとつはご紹介しませんが、ユーザはgo help コマンドで更に詳しいヘルプ情報を取得することができます。