Goはじめ

  • 投稿日:
  • by
  • カテゴリ:

Goを触ることにしたので、色々なドキュメントを読んだメモを書こうと思って始めたものの二つで力尽きたので続きはまた別に。

Go のインストール

tarボールを展開するだけでとりあえず終わり。 GOPATH環境変数は設定しない場合は/goが設定される。設定しなくても良い。 /go以外にしたい場合に設定すれば良いとのこと。

インストールした後に、普通設定すべきこととしてパスの設定がある。

export PATH=$PATH:$(go env GOPATH)/bin

https://golang.org/doc/install

Go の基本

以下のURLに基本が書いてあるのでとりあえずこれを読むのが良さそう。

https://golang.org/doc/code.html

$GOPATH(~/go/)が唯一のワークスペース。複数作らないで一つにする。と書いてある。 Go以外の言語では、プロジェクト毎にワークスペースがあるけれども、Goでは単一のワークスペースであることが違い。 そこ代わりに、単一のワークスペースに複数のリポジトリが含まれており、さらにそれらは複数のパッケージを含む。 リポジトリというのはバージョン管理の対象の単位。.gitディレクトリが存在するディレクトリのこと。 パッケージとは、ディレクトリ一つ毎にパッケージ一つであり、例えばパッケージ毎に異なる実行ファイルを提供する。 パッケージは複数のソースファイルを含んで良いが、ディレクトリは単一。

ワークスペースには、src/とbin/というディレクトリがあり、src/配下に複数のリポジトリを配置する。bin/には、それらの実行ファイルを配置する。

ワークスペースにはシンボリックリンクは使うべきではないとのこと。 現在のワークスペースは以下のコマンドで確認できる。

go env GOPATH

パッケージパス

自分で作ったGoソースファイルや誰かの作ったパッケージ等は、$GOPATH/src/の下のディレクトリパスを使って指定する。 fmtパッケージのような標準パッケージは短い。自分でパッケージを作成するときは将来的にも標準パッケージと同じにならないように注意する必要がある。ただし、github.comで公開するような場合は、github.com/ユーザ名 がそのベースパスとなり、その下にパッケージ名が続くようになる。

build and install

ソースファイルをビルドしてインストールするには、 go install コマンドを使う。 パッケージパスを引数に指定するか、パッケージディレクトリにcdしてからコマンドを実行する。

go install github.com/hseiyo/hello
or
cd $GOPATH/src/github.com/hseiyo/hello
go install

installできたコマンドは実行可能。 GOPATH/binをPATHに追加してあればコマンド名だけで実行可能。 go build コマンドを代わりに使うと、ビルドして実行ファイルは作成されるが、$GOPATH/binにはコピーされずにパッケージディレクトリに作成される。これも実行可能ではあるが、このパッケージが実行コマンドではなくライブラリの場合にはinstallではなく、buildを実行してパッケージディレクトリにバイナリファイルを置いておく。 他のソースファイルからimportする際に利用される。

パッケージ名

ソースファイルには必ず以下のようにようにしてパッケージ名を指定する。 同一のパッケージに所属するソースファイルはすべて同じパッケージ名を指定する。これは必ず指定が必要。 ディレクトリ名と同じ文字列をパッケージ名として指定する。

パッケージ名はほかのパッケージと同じものを利用しても問題ないが、インポートパス名は異なる必要がある。

テスト用ソースファイル

_test.goで終わるファイル名のファイルはテスト用に使用する。

testingパッケージをインポートした上で、Test<関数名>(t *testing.T)という関数を定義する。 そして以下のコマンドを実行する。

go test github.com/hseiyo/hello
or
cd $GOPATH/src/github.com/hseiyo/hello
go test

go get

例えば以下のコマンドは、リモートからファイルを取得(ダウンロード)して、ビルドしてインストール($GOPATH/bin/へのコピー)を行う。

go get github.com/hseiyo/hello

ただし、既に同じ名前のパッケージが存在している場合には、go install と同じ意味となる。