Merge pull request #453 from ernix/ja
Translate delta commits into Japanese
This commit is contained in:
45
ja/01.1.md
45
ja/01.1.md
@@ -3,8 +3,8 @@
|
||||
## 3つのインストール方法
|
||||
Goにはいくつものインストール方法があります。どれでも好きなのを選んでかまいません。ここでは3つのよくあるインストール方法をご紹介します:
|
||||
|
||||
- ソースコードのインストール:標準的なインストール方法です。Unix系システムをよく使うユーザ、特に開発者にとってはお馴染みの方法です。
|
||||
- 標準パッケージのインストール:Goは便利なインストールパッケージを用意しています。Windows, Linux, Macなどのシステムをサポートしています。初心者にはうってつけでしょう。システムのbit数に対応したインストールパッケージをダウンロードして、"Next"をたどるだけでインストールできます。
|
||||
- ソースコードのインストール:標準的なインストール方法です。Unix系システムをよく使うユーザ、特に開発者であれば、設定を好みに合わせて変更できます。
|
||||
- 標準パッケージのインストール:Goは便利なインストールパッケージを用意しています。Windows, Linux, Macなどのシステムをサポートしています。とりあえずさっとインストールするにはうってつけでしょう。システムのbit数に対応したインストールパッケージをダウンロードして、"Next"をたどるだけでインストールできます。 **おすすめ**
|
||||
- サードパーティツールによるインストール:現在便利なサードパーティパッケージも多くあります。たとえばUbuntuのapt-get、Macのhomebrewなどです。これらのシステムに慣れたユーザにはぴったりのインストール方法です。
|
||||
|
||||
最後に同じシステムの中で異なるバージョンのGoをインストールする場合は、[GVM](https://github.com/moovweb/gvm)が参考になります。どうすればよいか分からない場合一番うまくやれます。
|
||||
@@ -18,25 +18,25 @@ Unixでは、gccなどのツールをインストールする必要がありま
|
||||
|
||||
Windowsでは、MinGWをインストールする必要があります。その後MinGWでgccをインストールして、適切な環境変数を設定します。
|
||||
|
||||
Goは[Mercurial][hg]を使ってバージョン管理を行っています、まずMercurialをインストールし、その後でダウンロードできます。もしMercurialがインストールされているのであれば、以下のコードを実行します:
|
||||
直接オフィシャルサイトから[ソースコードをダウンロード](http://golang.org/dl/)できます。対応する`goVERSION.src.tar.gz`のファイルをダウンロードし、`$HOME`ディレクトリに解凍してから以下のコマンドを実行します。
|
||||
|
||||
もしGoのインストールディレクトリが`$GO_INSTALL_DIR`だった場合
|
||||
|
||||
hg clone -u release https://code.google.com/p/go
|
||||
cd go/src
|
||||
./all.bash
|
||||
|
||||
all.bashを実行後"ALL TESTS PASSED"が表示されると、インストール成功です。
|
||||
|
||||
上記はUnixスタイルのコマンドです、Windowsもインストール方法は似ており、all.batを実行するだけです。コンパイラはMinGWのgccを使います。
|
||||
上記はUnixスタイルのコマンドです、Windowsもインストール方法は似ており、`all.bat`を実行するだけです。コンパイラはMinGWのgccを使います。
|
||||
|
||||
その後環境変数をいくつか設定します、
|
||||
もしMacまたはUnixユーザであればいくつかの環境変数を設定する必要があります。再起動しても有効にしたい場合は以下のコマンドを`.bashrc`や`.zsh`に書いておきます。
|
||||
|
||||
export GOROOT=$HOME/go
|
||||
export GOBIN=$GOROOT/bin
|
||||
export PATH=$PATH:$GOBIN
|
||||
export GOPATH=$HOME/gopath
|
||||
export PATH=$PATH:$HOME/go/bin:$GOPATH/bin
|
||||
|
||||
下のような画像が現れると、インストール成功です。
|
||||
ファイルに書き込んだ場合は、`bash .bashrc`や`bash .zshrc`を実行してすぐに設定を有効にします。
|
||||
|
||||
Windowsシステムの場合は、環境変数を設定する必要があります。pathにgoが存在するディレクトリを追加し、gopath変数を設定します。
|
||||
|
||||
設定が終わり、コマンドプロンプトで`go`を入力すると、下図のような画面が表示されるはずです。
|
||||
|
||||

|
||||
|
||||
@@ -44,13 +44,17 @@ all.bashを実行後"ALL TESTS PASSED"が表示されると、インストール
|
||||
|
||||
GoのUsage情報が表示されれば、Goのインストールは成功です:もしこのコマンドが存在しない場合は、PATH環境変数のなかにGoのインストールディレクトリが含まれているか確認してください。
|
||||
|
||||
> GOPATHについては以降の章で詳しくご説明します
|
||||
|
||||
## Go標準パッケージのインストール
|
||||
|
||||
Goはさまざまなプラットホームでインストールパッケージを提供しています、これらのパッケージはデフォルトで以下のディレクトリにインストールします:/usr/local/go(Windows:c:\Go)。当然これらのインストール場所を変更することもできます、ただし変更後はあなたの環境変数を以下のように設定する必要があります:
|
||||
|
||||
export GOROOT=$HOME/go
|
||||
export PATH=$PATH:$GOROOT/bin
|
||||
export GOPATH=$HOME/gopath
|
||||
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
|
||||
|
||||
これらのコマンドはMacやUnixユーザであれば`.bashrc`や`.zshrc`ファイルに入れておくべきでしょう。Windowsユーザであれば当然環境変数に入れておきます。
|
||||
|
||||
### 自分の操作しているシステムが32bitか64bitか判断する方法
|
||||
|
||||
@@ -72,7 +76,7 @@ LinuxユーザはTerminalで`arch`(すなわち、`uname -a`)を実行するこ
|
||||
|
||||
### Mac インストール
|
||||
|
||||
[ダウンロードURL][downlink]にアクセスし、32bitシステムはgo1.0.3.darwin-386.pkgをダウンロードします。64bitシステムであればgo1.0.3.darwin-amd64.pkgをダウンロードします。ファイルをダブルクリックし、すべてデフォルトで「次へ」ボタンをクリックします。これでgoはあなたのシステムにインストールされました。デフォルトでPATHの中に適切な`~/go/bin`が追加されています。端末を開いて`go`と入力します。
|
||||
[ダウンロードURL][downlink]にアクセスし、32bitシステムはgo1.4.2.darwin-386-osx10.8.pkgをダウンロードします。64bitシステムであればgo1.4.2.darwin-amd64-osx10.8.pkgをダウンロードします。ファイルをダブルクリックし、すべてデフォルトで「次へ」ボタンをクリックします。これでgoはあなたのシステムにインストールされました。デフォルトでPATHの中に適切な`~/go/bin`が追加されています。端末を開いて`go`と入力します。
|
||||
|
||||
インストール成功の画像が表示されればインストール成功です。
|
||||
|
||||
@@ -80,11 +84,11 @@ LinuxユーザはTerminalで`arch`(すなわち、`uname -a`)を実行するこ
|
||||
|
||||
### Linux インストール
|
||||
|
||||
[ダウンロードURL][downlink]にアクセスし、32bitシステムであればgo1.0.3.linux-386.tar.gzを、64bitシステムであればgo1.0.3.linux-amd64.tar.gzをダウンロードします。
|
||||
[ダウンロードURL][downlink]にアクセスし、32bitシステムであればgo1.4.2.linux-386.tar.gzを、64bitシステムであればgo1.2.2.linux-amd64.tar.gzをダウンロードします。
|
||||
|
||||
以下ではGoがインストールされたディレクトリを`$GO_INSTALL_DIR`と仮定します。
|
||||
|
||||
`tar.gz`をインストールディレクトリに解凍します:`tar zxvf go1.0.3.linux-amd64.tar.gz -C $GO_INSTALL_DIR`
|
||||
`tar.gz`をインストールディレクトリに解凍します:`tar zxvf go1.4.2.linux-amd64.tar.gz -C $GO_INSTALL_DIR`
|
||||
|
||||
PATHを設定します。`export PATH=$PATH:$GO_INSTALL_DIR/go/bin`
|
||||
|
||||
@@ -115,11 +119,11 @@ gvmはサードパーティが開発したGoのバージョン管理ツールで
|
||||
|
||||
インストールが完了したあと、goをインストールすることができます:
|
||||
|
||||
gvm install go1.1
|
||||
gvm use go1.1
|
||||
gvm install go1.4.2
|
||||
gvm use go1.4.2
|
||||
|
||||
下のコマンドで、毎回gvm useをコールする手間を省くことができます:
|
||||
gvm use go1.1 --default
|
||||
gvm use go1.4.2 --default
|
||||
|
||||
上のコマンドを実行したあと、GOPATH、GOROOTなどの環境変数が自動的に設定されます。これで、直接利用することができます。
|
||||
|
||||
@@ -145,5 +149,4 @@ homebrewはMacで現在最も使用されているソフトウェア管理ツー
|
||||
* 前へ: [Goの環境設定](<01.0.md>)
|
||||
* 次へ: [GOPATHとワーキングディレクトリ](<01.2.md>)
|
||||
|
||||
[downlink]: http://code.google.com/p/go/downloads/list "Goインストールパッケージダウンロード"
|
||||
[hg]: http://mercurial.selenic.com/downloads/ "Mercurialダウンロード"
|
||||
[downlink]:http://golang.org/dl/ "Goインストールパッケージダウンロード"
|
||||
|
||||
96
ja/01.2.md
96
ja/01.2.md
@@ -1,13 +1,17 @@
|
||||
# 1.2 GOPATHとワーキングディレクトリ
|
||||
|
||||
## GOPATH設定
|
||||
go コマンドには重要な環境変数があります:$GOPATH<sup>1</sup>
|
||||
さきほどGoをインストールする際はGOPATH変数を設定する必要があるとご説明しました。Goはバージョン1.1から必ずこの変数を設定するようになっており、Goのインストールディレクトリと同じにはできません。このディレクトリは、GoのソースコードやGoの実行可能ファイル、並びにコンパイル済みのパッケージファイルを保存する為に使用します。そのためこのディレクトリには3つのサブディレクトリが存在します:src、bin、pkgです。
|
||||
|
||||
*(注:これはGoのインストールディレクトリではありません。以下では筆者のワーキングディレクトリで説明します。ご自身のマシン上のワーキングディレクトリに置き換えてください。)*
|
||||
## GOPATH設定
|
||||
go コマンドは、ある重要な環境変数に依存しています:$GOPATH<sup>1</sup>
|
||||
|
||||
Windowsシステムにおいて環境変数の形式は`%GOPATH%`です。この本の中では主にUnix形式を使用します。Windowsユーザは適時置き換えてください。
|
||||
|
||||
*(注:これはGoのインストールディレクトリではありません。以下では筆者のワーキングディレクトリで説明します。もし異なるディレクトリを使用する場合はGOPATHをあなたのワーキングディレクトリに置き換えてください。)*
|
||||
|
||||
Unix に似た環境であれば大体以下のような設定になります:
|
||||
```sh
|
||||
export GOPATH=/home/apple/mygo
|
||||
export GOPATH=/home/apple/mygo
|
||||
```
|
||||
上のディレクトリを新たに作成し、上の一行を`.bashrc`または`.zshrc`もしくは自分の`sh`の設定ファイルに加えます。
|
||||
|
||||
@@ -26,28 +30,29 @@ GOPATHは複数のディレクトリを許容します。複数のディレク
|
||||
|
||||
以降私はすべての例でmygoを私のgopathディレクトリとします。
|
||||
|
||||
## アプリケーションディレクトリ構成
|
||||
パッケージとディレクトリの作成:$GOPATH/src/mymath/sqrt.go(パッケージ名:"mymath")
|
||||
## ソースコードディレクトリ構成
|
||||
GOPATH内のsrcディレクトリはこれから開発するプログラムにとってメインとなるディレクトリです。全てのソースコードはこのディレクトリに置くことになります。一般的な方法では一つのプロジェクトが一つのディレクトリが割り当てられます、例えば:$GOPATH/src/mymath はmymathというアプリケーションパッケージか実行アプリケーションになります。これはpackageがmainかそうでないかによって決定します。mainであれば実行可能アプリケーションで、そうでなければアプリケーションパッケージになります。これに関してはpackageを後ほどご紹介する予定です。
|
||||
|
||||
以後私が新規に作成するアプリケーションまたはコードパッケージはsrcディレクトリに新規ディレクトリを作成します。ディレクトリ名はほぼコードパッケージの名前です。当然ネストしたディレクトリもありえます、例えば、srcの下にディレクトリ $GOPATH/src/github.com/astaxie/beedbというようなディレクトリを作成すると、このパッケージのパスは"github.com/astaxie/beedb"になります。パッケージ名は最後のディレクトリであるbeedbです。
|
||||
|
||||
以下のコードを実行します。
|
||||
新しくアプリケーションやソースパッケージを作成するときは、srcディレクトリの中にディレクトリを作るところから始めます。ディレクトリ名は一般的にソースパッケージ名になります。もちろんネストしたディレクトリも可能です。例えばsrcの中に$GOPATH/src/github.com/astaxie/beedbというディレクトリを作ったとすると、このパッケージパスは"github.com/astaxie/beedb"になり、パッケージ名は最後のディレクトリであるbeedbになります。
|
||||
|
||||
以下ではmymathを例にどのようにアプリケーションパッケージをコーディングするかご説明します。以下のコードを実行します。
|
||||
```sh
|
||||
cd $GOPATH/src
|
||||
mkdir mymath
|
||||
cd $GOPATH/src
|
||||
mkdir mymath
|
||||
```
|
||||
sqrt.goというファイルを作成し、内容を以下のようにします。
|
||||
```go
|
||||
// $GOPATH/src/mymath/sqrt.goコードは以下の通り:
|
||||
package mymath
|
||||
// $GOPATH/src/mymath/sqrt.goコードは以下の通り:
|
||||
package mymath
|
||||
|
||||
func Sqrt(x float64) float64 {
|
||||
z := 0.0
|
||||
for i := 0; i < 1000; i++ {
|
||||
z -= (z*z - x) / (2 * x)
|
||||
}
|
||||
return z
|
||||
func Sqrt(x float64) float64 {
|
||||
z := 0.0
|
||||
for i := 0; i < 1000; i++ {
|
||||
z -= (z*z - x) / (2 * x)
|
||||
}
|
||||
return z
|
||||
}
|
||||
```
|
||||
このように私のアプリケーションパッケージディレクトリとコードが作成されました。注意:一般的にpackageの名前とディレクトリ名は一致させるべきです。
|
||||
|
||||
@@ -60,50 +65,59 @@ sqrt.goというファイルを作成し、内容を以下のようにします
|
||||
|
||||
インストールが終われば、以下のディレクトリに入り
|
||||
```sh
|
||||
cd $GOPATH/pkg/${GOOS}_${GOARCH}
|
||||
//以下のファイルが現れるはずです。
|
||||
mymath.a
|
||||
cd $GOPATH/pkg/${GOOS}_${GOARCH}
|
||||
//以下のファイルが現れるはずです。
|
||||
mymath.a
|
||||
```
|
||||
この.aファイルはアプリケーションパッケージです。ならば我々はどのように実行できるでしょうか?
|
||||
|
||||
次にアプリケーション・プログラムを作成して実行します。
|
||||
次にアプリケーション・プログラムを作成してこのアプリケーションパッケージをコールします。
|
||||
|
||||
アプリケーションパッケージmathappを作ります。
|
||||
```sh
|
||||
cd $GOPATH/src
|
||||
mkdir mathapp
|
||||
cd mathapp
|
||||
vim main.go
|
||||
cd $GOPATH/src
|
||||
mkdir mathapp
|
||||
cd mathapp
|
||||
vim main.go
|
||||
```
|
||||
// `$GOPATH/src/mathapp/main.go`コード:
|
||||
|
||||
`$GOPATH/src/mathapp/main.go`コード:
|
||||
```go
|
||||
package main
|
||||
package main
|
||||
|
||||
import (
|
||||
"mymath"
|
||||
"fmt"
|
||||
)
|
||||
import (
|
||||
"mymath"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2))
|
||||
}
|
||||
func main() {
|
||||
fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2))
|
||||
}
|
||||
```
|
||||
どのようにプログラムをコンパイルするのでしょうか?このアプリケーションディレクトリに入り、`go build`を実行すれば、このディレクトリの下にmathappの実行可能ファイルが生成されます。
|
||||
このパッケージは`main`であることが分かると思います。importにおいてコールするパッケージは`mymath`であり、これが`$GOPATH/src`のパスに対応します。もしネストしたディレクトリであれば、importの中でネストしたディレクトリをインポートします。例えばいくつものGOPATHがあった場合も同じで、Goは自動的に複数の`$GOPATH/src`の中から探し出します。
|
||||
|
||||
さて、どのようにプログラムをコンパイルするのでしょうか?このアプリケーションディレクトリに入り、`go build`を実行すれば、このディレクトリの下にmathappの実行可能ファイルが生成されます。
|
||||
```sh
|
||||
./mathapp
|
||||
./mathapp
|
||||
```
|
||||
|
||||
以下のように出力されます。
|
||||
```sh
|
||||
Hello, world. Sqrt(2) = 1.414213562373095
|
||||
Hello, world. Sqrt(2) = 1.414213562373095
|
||||
```
|
||||
どのようにアプリケーションをインストールするのでしょうか。このディレクトリに入り、`go install`を実行します。すると、$GOPATH/bin/の下に実行可能ファイルmathappが作成されますので、コマンドラインから以下のように入力することで実行することができます。
|
||||
|
||||
mathapp
|
||||
どのようにアプリケーションをインストールするのでしょうか。このディレクトリに入り、`go install`を実行すると、$GOPATH/bin/の下に実行可能ファイルmathappが作成されます。`$GOPATH/bin`が我々のPATHに追加されていることを思い出して下さい、コマンドラインから以下のように入力することで実行することができます。
|
||||
|
||||
```sh
|
||||
mathapp
|
||||
```
|
||||
|
||||
この場合も以下のように出力されます。
|
||||
|
||||
Hello, world. Sqrt(2) = 1.414213562373095
|
||||
|
||||
ここではどのように実行可能アプリケーションをコンパイル/インストールし、ディレクトリ構造を設計するかについてご紹介しました。
|
||||
|
||||
## リモートパッケージの取得
|
||||
go言語はリモートパッケージを取得するツール`go get`を持っています。現在go getは多数のオープンソースリポジトリをサポートしています(github、googlecode、bitbucket、Launchpad)
|
||||
|
||||
@@ -156,8 +170,6 @@ go getは以下のような手順を踏みます。まずはじめにソース
|
||||
|
||||
上述の構成から明確に判断できるのは、binディレクトリの下にコンパイル後の実行可能ファイルが保存され、pkgの下に関数パッケージが保存され、srcの下にアプリケーションのソースコードが保存されているということです。
|
||||
|
||||
- - -
|
||||
[1] Windowsシステムの環境変数の形式は`%GOPATH%`です。本書では主にUnix形式を使いますので、Windowsユーザは適時自分の環境に置き換えてください。
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [GOのインストール](<01.1.md>)
|
||||
|
||||
106
ja/01.3.md
106
ja/01.3.md
@@ -4,7 +4,7 @@
|
||||
|
||||
Go言語は完全なコマンド操作ツールセットを持つ言語です。コマンドラインで`go`を実行することでそれらを確認することができます:
|
||||
|
||||

|
||||

|
||||
|
||||
図1.3 Goコマンドで詳細情報を表示
|
||||
|
||||
@@ -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
|
||||
|
||||
42
ja/01.4.md
42
ja/01.4.md
@@ -47,17 +47,11 @@
|
||||
**LiteIDEインストール設定**
|
||||
|
||||
* LiteIDEインストール
|
||||
* ダウンロード <http://code.google.com/p/golangide>
|
||||
* ダウンロード http://sourceforge.net/projects/liteide/files/>
|
||||
* ソースコード <https://github.com/visualfc/liteide>
|
||||
|
||||
まずGo言語環境をインストールし、その後オペレーティングシステムにしたがってLiteIDEの対応圧縮ファイルを直接解凍すれば使用できます。
|
||||
|
||||
* Gocodeのインストール
|
||||
|
||||
Go言語の入力自動補完を起動するにはGocodeをインストールする必要があります:
|
||||
|
||||
go get -u github.com/nsf/gocode
|
||||
|
||||
* コンパイル環境設定
|
||||
|
||||
自身のシステムの要求にしたがってLiteIDEが現在使用している環境変数を切り替えまたは設定します。
|
||||
@@ -99,7 +93,7 @@
|
||||
|
||||
## Sublime Text
|
||||
|
||||
ここではSublime Text 2(以下「Sublime」)+GoSublime+gocode+Margoの組み合わせをご紹介します。なぜこの組み合わせなのでしょうか?
|
||||
ここではSublime Text 2(以下「Sublime」)+GoSublimeの組み合わせをご紹介します。なぜこの組み合わせなのでしょうか?
|
||||
|
||||
- コード表示の自動化、以下の図の通り
|
||||
|
||||
@@ -158,30 +152,6 @@
|
||||
|
||||
ln -s /Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl /usr/local/bin/sublime
|
||||
|
||||
5. プロジェクトのサポート、sublimeにプロジェクト自身のpkgライブラリのサポートを示します。二種類の基本的な実装があります
|
||||
|
||||
ひとつは gosublime プラグインの `Setting - user` の設定
|
||||
|
||||
{
|
||||
"env": { "GOPATH": "$HOME/golang:$GS_GOPATH" }
|
||||
}
|
||||
|
||||
`$GS_GOPATH` は gosublime の仮想的な環境変数です。自動的に`.go`ファイルが存在する `~/go/src` を探し出すことで、 `~/go/` をプロジェクトのパスと推測し、自動的に `GOPATH` を適用します。(注意:このような方法ではsublimeにおいてオリジナルのGOPATHを上書きしてしまいます。もしこの設定でエラーが発生した場合は、GOPATHに関連した問題が発生していることになります)
|
||||
|
||||
もうひとつは、sublime プロジェクトの保存です。 project_name.sublime-project を修正して項目を追加します
|
||||
|
||||
|
||||
"settings": {
|
||||
"GoSublime": {
|
||||
"env": {
|
||||
"GOPATH": "$HOME/golang/pwd" // ここをプロジェクトのパスに修正
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"folders"{...
|
||||
|
||||
|
||||
|
||||
## Vim
|
||||
Vimはviから発展したテキストエディタです。コード補完、コンパイルまたエラージャンプなど、プログラミングに特化した機能が豊富です。広くプログラマに使用されています。
|
||||
@@ -203,7 +173,7 @@ Vimはviから発展したテキストエディタです。コード補完、コ
|
||||
|
||||
go get -u github.com/nsf/gocode
|
||||
|
||||
gocodeはデフォルトで`$GOBIN`の下にインストールされています。
|
||||
gocodeはデフォルトで`$GOPATH/bin`の下にインストールされています。
|
||||
|
||||
4. [Gocode](https://github.com/nsf/gocode/)を設定します。
|
||||
|
||||
@@ -217,11 +187,11 @@ Vimはviから発展したテキストエディタです。コード補完、コ
|
||||
propose-builtins true
|
||||
lib-path "/home/border/gocode/pkg/linux_amd64"
|
||||
|
||||
>gocode setの2つのパラメータの意味を説明します:
|
||||
>gocode setの2つのパラメータの意味を説明します:
|
||||
>
|
||||
>propose-builtins:はGoのビルトイン関数を補完するかです。タイプは定数です。デフォルトはfalseで、表示しません。
|
||||
>propose-builtins:はGoのビルトイン関数を補完するかです。タイプは定数です。デフォルトはfalseで、表示しません。
|
||||
>
|
||||
>lib-path:デフォルトで、gocodeは**$GOPATH/pkg/$GOOS_$GOARCH**と**$GOROOT/pkg/$GOOS_$GOARCH**ディレクトリのパッケージを検索するだけです。当然この設定には私達の外側のlibを検索できるようパスを設定することができます。
|
||||
>lib-path:デフォルトで、gocodeは**$GOPATH/pkg/$GOOS_$GOARCH**と**$GOROOT/pkg/$GOOS_$GOARCH**ディレクトリのパッケージを検索するだけです。当然この設定には私達の外側のlibを検索できるようパスを設定することができます。
|
||||
|
||||
|
||||
5. おめでとうございます。インストール完了です。あなたは今から`:e main.go`でGoで開発する面白さを体験することができます。
|
||||
|
||||
25
ja/02.2.md
25
ja/02.2.md
@@ -24,7 +24,7 @@ Go言語では変数は数多くの方法で定義されます。
|
||||
複数の変数を同時に初期化します。
|
||||
|
||||
/*
|
||||
すべて"type"型の3つの変数を定義し、それぞれ個別に初期化を行います。
|
||||
すべてが"type"型となる変数をそれぞれ定義し、個別に初期化を行います。
|
||||
vname1はv1,vname2はv2,vname3はv3
|
||||
*/
|
||||
var vname1, vname2, vname3 type= v1, v2, v3
|
||||
@@ -63,7 +63,7 @@ Goはすでに宣言されている未使用の変数をコンパイル時にエ
|
||||
|
||||
## 定数
|
||||
|
||||
いわゆる定数というのは、プログラムがコンパイルされる段階で値が決定されます。また、プログラムが実行される時には値の変更は許されません。定数には数値、bool値または文字列等の型を定義することができます。
|
||||
いわゆる定数というのは、プログラムがコンパイルされる段階で値が決定されます。そのため、プログラムが実行される時には値の変更は許されません。定数には数値、bool値または文字列等の型を定義することができます。
|
||||
|
||||
この文法は以下の通りです:
|
||||
|
||||
@@ -99,7 +99,7 @@ Goではbool値の型は`bool`です。値は`true`もしくは`false`です。
|
||||
|
||||
### 数値型
|
||||
|
||||
整数型には符号付きと符号無しの2つがあります。Goはまた`int`と`uint`をサポートしています。この2つの型の長さは同じですが、実際の長さは異なるコンパイラによって決定されます。~~現在のgccとgccgoコンパイラは32bitと64bitプラットフォーム上では常に32bitで`int`と`uint`を表示しますが、将来64bitプラットフォーム上では64bitまで拡張されるかもしれません~~。Goでは直接bit数を指定できる型もあります:`rune`, `int8`, `int16`, `int32`, `int64`と`byte`, `uint8`, `uint16`, `uint32`, `uint64`です。この中で`rune`は`int32`のエイリアスです。`byte`は`uint8`のエイリアスです。
|
||||
整数型には符号付きと符号無しの2つがあります。Goはまた`int`と`uint`をサポートしています。この2つの型の長さは同じですが、実際の長さは異なるコンパイラによって決定されます。Goでは直接bit数を指定できる型もあります:`rune`, `int8`, `int16`, `int32`, `int64`と`byte`, `uint8`, `uint16`, `uint32`, `uint64`です。この中で`rune`は`int32`のエイリアスです。`byte`は`uint8`のエイリアスです。
|
||||
|
||||
>注意しなければならないのは、これらの型の変数間は相互に代入または操作を行うことができないということです。コンパイル時にコンパイラはエラーを発生させます。
|
||||
>
|
||||
@@ -227,8 +227,6 @@ Go言語では、複数の定数・変数を宣言する場合、または複数
|
||||
prefix string
|
||||
)
|
||||
|
||||
>他の値や`iota`に設定されているものを除いて、各`const`グループのはじめの定数はデフォルトで0となります。二番目以降の定数は前の定数の値がデフォルト値となります。もし前の定数の値が`iota`であれば、直後の値も`iota`になります。
|
||||
|
||||
### iota列挙型
|
||||
|
||||
Goでは`iota`というキーワードがあります。このキーワードは`enum`を宣言する際に使用されます。このデフォルト値は0からはじまり、順次1が追加されます:
|
||||
@@ -246,6 +244,8 @@ Goでは`iota`というキーワードがあります。このキーワードは
|
||||
e, f, g = iota, iota, iota //e=0,f=0,g=0 iotaの同一行は同じです
|
||||
)
|
||||
|
||||
>他の値や`iota`に設定されているものを除いて、各`const`グループのはじめの定数はデフォルトで0となります。二番目以降の定数は前の定数の値がデフォルト値となります。もし前の定数の値が`iota`であれば、直後の値も`iota`になります。
|
||||
|
||||
### Goプログラムのデザインルール
|
||||
Goがこのように簡潔なのは、それがいくつかのデフォルトの行為を持っているからです:
|
||||
- 大文字で始まる変数はエクスポート可能です。つまり、他のパッケージから読むことができる、パブリックな変数だということです。対して小文字で始まる変数はエクスポートできません。これはプライベート変数です。
|
||||
@@ -379,6 +379,19 @@ sliceには便利な操作があります
|
||||
注:`append`関数は`slice`が参照した配列の内容を変更し得ます。そのため、参照先と同一の配列の他の`slice`にも影響します。
|
||||
しかし`slice`の中に余分なスペースが無い(`(cap-len) == 0`)場合、動的なメモリから新たな配列空間が割り当てられます。返される`slice`配列のポインタはこの空間を指しています。また、もとの配列の内容は変わりません。この配列を参照している他の`slice`は影響を受けません。
|
||||
|
||||
Go1.2より、sliceは三引数のsliceをサポートするようになりました。以前まで我々は以下のような方法でsliceまたはarrayからsliceを取り出していました
|
||||
|
||||
var array [10]int
|
||||
slice := array[2:4]
|
||||
|
||||
この例ではsliceの要素数は8で、新しいバージョンでは以下のように要素数を指定することができます
|
||||
|
||||
slice = array[2:4:7]
|
||||
|
||||
上の要素数は`7-2`、即ち5となります。このように生成された新しいsliceでは最後の3つの要素にアクセスする方法がなくなります。
|
||||
|
||||
もしsliceが`array[:i:j]`のような形式だった場合は、第一引数は空と見なされ、デフォルトの0となります。
|
||||
|
||||
### map
|
||||
|
||||
`map`の概念もPythonのディクショナリです。この形式は`map[keyType]valueType`です。
|
||||
@@ -448,6 +461,8 @@ mapを使う段階で注意しなければならないことがいくつかあ
|
||||
|
||||
図2.5 makeとnewの低レイヤでのメモリの割り当て
|
||||
|
||||
|
||||
## ゼロ値
|
||||
"ゼロ値"というのは何も空の値ではありません。これは一種の"変数が埋めらる前"のデフォルト値であり、通常は0です。
|
||||
それぞれの型のゼロ値は以下の通りです
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ mymysql、sqlite3のドライバではどのようにコールしているのか
|
||||
|
||||
>新人はこの`_`にとても戸惑いがちです。実はこれはGoの絶妙な設計なのです。変数に値を代入する際、よくこの記号が現れます。これは変数を代入する時のプレースホルダの省略です。パッケージのインポートにこの記号を使っても同じような作用があります。ここで使用した`_`はインポートした後のパッケージ名で、このパッケージに定義されている関数、変数などのリソースを直接使用しない事を意味しています。
|
||||
|
||||
>2.3節で述べたフローと関数の中でinit関数の初期化プロセスをご紹介しました。パッケージがインポートされる際はパッケージのinit関数が自動的にコールされ、このパッケージに対する初期化が完了します。そのため、上のデータベースドライバパッケージをインポートするとinit関数が自動的にコールされます。つぎに、init関数でこのデータベースドライバを登録し、以降のコードの中で直接このデータベースドライバを直接使用することができます。
|
||||
>2.3節のフローと関数の章においてinit関数の初期化プロセスをご紹介しました。パッケージがインポートされる際はパッケージのinit関数が自動的にコールされ、このパッケージに対する初期化が完了します。そのため、上のデータベースドライバパッケージをインポートするとinit関数が自動的にコールされます。つぎに、init関数でこのデータベースドライバを登録し、以降のコードの中で直接このデータベースドライバを直接使用することができます。
|
||||
|
||||
## driver.Driver
|
||||
Driverはデータベースドライバのインターフェースです。methodがひとつ定義されています: Open(name string)、このメソッドはデータベースのConnインターフェースを一つ返します。
|
||||
|
||||
Reference in New Issue
Block a user