From 41c235c8bf924be19f9c839ae6caa143a5ff7e42 Mon Sep 17 00:00:00 2001 From: Shin Kojima Date: Mon, 23 Mar 2015 21:04:37 +0900 Subject: [PATCH] [ja] apply patch --- ja/01.2.md | 96 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 42 deletions(-) diff --git a/ja/01.2.md b/ja/01.2.md index 72a27153..a327a8fe 100644 --- a/ja/01.2.md +++ b/ja/01.2.md @@ -1,13 +1,17 @@ # 1.2 GOPATHとワーキングディレクトリ -## GOPATH設定 - go コマンドには重要な環境変数があります:$GOPATH1 +さきほどGoをインストールする際はGOPATH変数を設定する必要があるとご説明しました。Goはバージョン1.1から必ずこの変数を設定するようになっており、Goのインストールディレクトリと同じにはできません。このディレクトリは、GoのソースコードやGoの実行可能ファイル、並びにコンパイル済みのパッケージファイルを保存する為に使用します。そのためこのディレクトリには3つのサブディレクトリが存在します:src、bin、pkgです。 - *(注:これはGoのインストールディレクトリではありません。以下では筆者のワーキングディレクトリで説明します。ご自身のマシン上のワーキングディレクトリに置き換えてください。)* +## GOPATH設定 + go コマンドは、ある重要な環境変数に依存しています:$GOPATH1 + + 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,49 +65,58 @@ 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 * [目次]() * 前へ: [GOのインストール](<01.1.md>)