From 21f420c3ab8449add18e3263f86a04f1aea879ad Mon Sep 17 00:00:00 2001 From: Shin Kojima Date: Mon, 23 Mar 2015 22:46:38 +0900 Subject: [PATCH] [ja] apply patch --- ja/01.3.md | 104 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 96 insertions(+), 8 deletions(-) diff --git a/ja/01.3.md b/ja/01.3.md index 62a5ee27..0ca8fa34 100644 --- a/ja/01.3.md +++ b/ja/01.3.md @@ -12,7 +12,7 @@ ## go build - このコマンドは主にコンパイルテストに用いられます。パッケージのコンパイル作業中、もし必要であれば、同時に関連パッケージもコンパイルすることができます。 + このコマンドは主にソースコードのコンパイルに用いられます。パッケージのコンパイル作業中、もし必要であれば、同時に関連パッケージもコンパイルすることができます。 - もし普通のパッケージであれば、我々が1.2章で書いた`mypath`パッケージのように、`go build`を実行したあと、何のファイルも生成しません。もし`$GOPATH/pkg`の下に対応するファイルを生成する必要があれば、`go install`を実行してください。 @@ -35,9 +35,28 @@ `go build`の際、システム名の末尾のファイルから選択的にコンパイルすることができます(Linux、Darwin、Windows、Freebsd) +引数の紹介 + +- `-o` 出力するファイル名を指定します。パスが含まれていても構いません。例えば `go build -o a/b/c` +- `-i` パッケージをインストールします。コンパイル+`go install` +- `-a` すでに最新であるパッケージを全て更新します。ただし標準パッケージには適用されません。 +- `-n` 実行が必要なコンパイルコマンドを出力します。ただし、実行はされません。これにより低レイヤーで一体何が実行されているのかを簡単に知る事ができます。 +- `-p n` マルチプロセスで実行可能なコンパイル数を指定します。デフォルトはCPU数です。 +- `-race` コンパイルを行う際にレースコンディションの自動検出を行います。64bitマシンでのみ対応しています。 +- `-v` 現在コンパイル中のパッケージ名を出力します。 +- `-work` コンパイル時の一時ディレクトリ名を出力し、すでに存在する場合は削除しなくなります。 +- `-x` 実行しているコマンドを出力します。`-n`の結果とよく似ていますが、この場合は実行します。 +- `-ccflags 'arg list'` オプションを5c, 6c, 8cに渡してコールします。 +- `-compiler name` コンパイラを指定します。gccgoか、またはgcです。 +- `-gccgoflags 'arg list'` オプションをgccgoリンカに渡してコールします。 +- `-gcflags 'arg list'` オプションを5g, 6g, 8gに渡してコールします +- `-installsuffix suffix` デフォルトのインストールパッケージと区別するため、このサフィックスを利用して依存するパッケージをインストールします。`-race`をオプションに指定した場合はデフォルトで`-installsuffix race`が有効になっています。`-n`コマンドで確かめることができますよ。 +- `-ldflags 'flag list'` オプションを5l, 6l, 8lに渡してコールします。 +- `-tags 'tag list'` コンパイル時にこれらのtagをつけることができます。tagの詳細な制限事項に関しては [Build Constraints](http://golang.org/pkg/go/build/) を参考にして下さい。 + ## go clean - このコマンドは現在のソースコードパッケージのなかでコンパイラが生成したファイルを取り除く操作を行います。これらのファイルはすなわち: + このコマンドは現在のソースコードパッケージと関連するソースパッケージのなかでコンパイラが生成したファイルを取り除く操作を行います。これらのファイルはすなわち: _obj/ 旧objectディレクトリ、MakeFilesが作成する。 _test/ 旧testディレクトリ,Makefilesが作成する。 @@ -49,14 +68,39 @@ DIR(.exe) go buildが作成する。 DIR.test(.exe) go test -cが作成する。 MAINFILE(.exe) go build MAINFILE.goが作成する。 + *.so SWIG によって生成される。 私は基本的にこのコマンドを使ってコンパイルファイルを掃除します。ローカルでテストを行う場合これらのコンパイルファイルはシステムと関係があるだけで、コードの管理には必要ありません。 + $ go clean -i -n + cd /Users/astaxie/develop/gopath/src/mathapp + rm -f mathapp mathapp.exe mathapp.test mathapp.test.exe app app.exe + rm -f /Users/astaxie/develop/gopath/bin/mathapp + +引数紹介 + +- `-i` go installがインストールするファイル等の、関係するインストールパッケージと実行可能ファイルを取り除きます。 +- `-n` 実行する必要のある削除コマンドを出力します。ただし実行はされません。これにより低レイヤで何が実行されているのかを簡単に知ることができます。 +- `-r` importによってインポートされたパッケージを再帰的に削除します。 +- `-x` 実行される詳細なコマンドを出力します。`-n`出力の実行版です。 + ## 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 fmtコマンドを使うにあたって実際にはgofmtがコールますが、-wオプションが必要になります。さもなければ、整形結果はファイルに書き込まれません。gofmt -w -l src、ですべての項目を整形することができます。 + +go fmtはgofmtの上位レイヤーのパッケージされたコマンドです。より個人的なフォーマットスタイルが欲しい場合は [gofmt](http://golang.org/cmd/gofmt/) を参考にしてください。 + +gofmtの引数紹介 + +- `-l` フォーマットする必要のあるファイルを表示します。 +- `-w` 修正された内容を標準出力に書き出すのではなく、直接そのままファイルに書き込みます。 +- `-r` “a[b:len(a)] -> a[b:]”のような重複したルールを追加します。大量に変換を行う際に便利です。 +- `-s` ファイルのソースコードを簡素化します。 +- `-d` ファイルに書き込まず、フォーマット前後のdiffを表示します。デフォルトはfalseです。 +- `-e` 全ての文法エラーを標準出力に書き出します。もしこのラベルを使わなかった場合は異なる10行のエラーまでしか表示しません。 +- `-cpuprofile` テストモードをサポートします。対応するするcpufile指定のファイルに書き出します。 ## go get @@ -69,10 +113,21 @@ そのため、`go get`を正常に動作させるためには、あらかじめ適切なソースコード管理ツールがインストールされていると同時にこれらのコマンドがあなたのPATHに入っていなければなりません。実は`go get`はカスタムドメインの機能をサポートしています。具体的な内容は`go help remote`を参照ください。 +引数紹介: + +- `-d` ダウンロードするだけでインストールしません。 +- `-f` `-u`オプションを与えた時だけ有効になります。`-u`オプションはimportの中の各パッケージが既に取得されているかを検証しなくなります。ローカルにforkしたパッケージに対して特に便利です。 +- `-fix` ソースコードをダウンロードするとまずfixを実行してから他の事を行うようになります。 +- `-t` テストを実行する為に必要となるパッケージも同時にダウンロードします。 +- `-u` パッケージとその依存パッケージをネットワークから強制的に更新します。 +- `-v` 実行しているコマンドを表示します。 + ## go install このコマンドは実際には内部で2ステップの操作に分かれます。第1ステップはリザルトファイルの生成(実行可能ファイルまたはaパッケージ)、第2ステップはコンパイルし終わった結果を`$GOPATH/pkg`または`$GOPATH/bin`に移動する操作です。 +引数は`go build`のコンパイルオプションをサポートしています。みなさんは`-v`オプションだけ覚えていただければ結構です。これにより低レイヤーの実行状況をいつでも確認することができます。 + ## go test このコマンドを実行すると、ソースコードディレクトリ以下の`*_test.go`ファイルが自動的にロードされ、テスト用の実行可能ファイルが生成/実行されます。出力される情報は以下のようなものになります @@ -84,10 +139,44 @@ デフォルトの状態で、オプションを追加する必要はありません。自動的にあなたのソースコードパッケージ以下のすべてのtestファイルがテストされます。もちろんオプションを追加しても構いません。詳細は`go help testflag`を確認してください。 -## go doc +ここでは良く使われるオプションについてご紹介します: - (1.2rc1 から go doc コマンドはなくなり、 godoc コマンドのみになります) - 多くの人がgoはいかなるサードパーティドキュメントも必要としないと言っています。なぜなら例えばchmマニュアルのように(もっとも私はすでに[chmマニュアル](https://github.com/astaxie/godoc)を作っていますが)、この中にすでに非常に協力なドキュメントツールが入っているからです。 +- `-bench regexp` 指定したbenchmarksを実行します。例えば `-bench=.` +- `-cover` テストカバー率を起動します。 +- `-run regexp` regexpにマッチする関数だけを実行します。例えば `-run=Array` とすることで名前がArrayから始まる関数だけを実行します。 +- `-v` テストの詳細なコマンドを表示します。 + +## go tool +`go tool`にはいくつものコマンドがあります。ここでは2つだけご紹介します。fixと vetです。 + +- `go tool fix .` は以前の古いバージョンを新しいバージョンに修復します。例えば、go1以前の古いバージョンのコードをgo1に焼き直したり、APIを変化させるといったことです。 +- `go tool vet directory|files` はカレントディレクトリのコードが正しいコードであるか分析するために使用されます。例えばfmt.Printfをコールする際のオプションが正しくなかったり、関数の途中でreturnされたことによって到達不可能なコードが残っていないかといった事です。 + +## go generate +このコマンドはGo1.4になって初めてデザインされました。コンパイル前にある種のコードを自動で生成する目的に使用されます。`go generate`と`go build`は全くことなるコマンドです。ソースコード中の特殊なコメントをを分析することで、対応するコマンドを実行します。これらのコマンドは明確に何の依存も存在しません。この機能を使用する場合には必ず次の事を念頭に置いてください。`go generate`はあなたの為に存在します。あなたのパッケージを使用する誰かの為のものではありません。これはある一定のコードを生成するためにあります。 + +簡単な例をご紹介します。例えば我々が度々`yacc`を使ってコードを生成していたとしましょう。その場合以下のようなコマンドをいつも使用することになります: + + go tool yacc -o gopher.go -p parser gopher.y + +-o は出力するファイル名を指定します。-pはパッケージ名を指定します。これは単独のコマンドであり、もし`go generate`によってこのコマンドを実行する場合は当然ディレクトリの任意の`xxx.go`ファイルの任意の位置に以下のコメントを一行追加します。 + + //go:generate go tool yacc -o gopher.go -p parser gopher.y + +注意すべきは、`//go:generate`に空白が含まれていない点です。これは固定のフォーマットで、ソースファイルを舐める時はこのフォーマットに従って判断されます。 + +これにより以下のようなコマンドによって、生成・コンパイル・テストを行うことができます。もし`gopher.y`ファイルに修正が発生した場合は、再度`go generate`を実行することでファイルを上書きすればよいことになります。 + + $ go generate + $ go build + $ go test + + +## godoc + +Go1.2バージョンより以前は`go doc`コマンドがサポートされていましたが、今後は全てgodocコマンドに移されました。このようにインストールします`go get golang.org/x/tools/cmd/godoc` + +多くの人がgoにはサードパーティのドキュメントが必要無いと謳っています。なぜなら例えばchmハンドブックのように(もっとも私はすでに[chmマニュアル](https://github.com/astaxie/godoc)を作っていますが)、この中にはとても強力なドキュメントツールが含まれているからです。 どのように対応するpackageのドキュメントを確認すればよいでしょうか? 例えばbuiltinパッケージであれば、`go doc builtin`と実行します。 @@ -101,13 +190,12 @@ goは他にも様々なツールを提供しています。例えば以下のツール - go fix は以前の古いバージョンのコードを新しいバージョンに復元するために使われます。例えばgo1の前の古いバージョンのコードをgo1に移動させます。 go version はgoの現在のバージョンを確認します。 go env は現在のgoの環境変数を確認します。 go list は現在インストールされている全てのpackageをリストアップします。 go run はGoプログラムのコンパイルと実行を行います。 -以上これらのツールはまだ多くのオプションがあり、ひとつひとつはご紹介しませんが、ユーザは`go help コマンド`で更に詳しいヘルプ情報を取得することができます。 +これらのツールはまだ多くのオプションがあり、ひとつひとつはご紹介しませんが、ユーザは`go help コマンド`で更に詳しいヘルプ情報を取得することができます。 ## links