TanabataNikki's diary

主に技術的なことを書きます。当面は高校の化学を復習するところからはじめます。

世の中の少し不思議を探してみる

Golang Cafe

広告:第24回勉強会@岡山 - GDGChugoku よろしくね。

 

毎週日曜日に開催されているGolang Cafeに参加しました。このペースでの勉強会は全国でもめずらしいのではないでしょうか。場所は、青江の倉式珈琲店です。

f:id:TanabataNikki:20110813154624j:plain

本日は、How to Write Go Codeを、最初からやりました。ノートPCにLinuxMintとgolangだけでいったのに、みなさまありがとうございます。では、今日やったこと。

  • まず、Workspaceをつくります。

 % mkdir $HOME/golang (ここがWorkspaceになります)

その下にsrcディレクトリを作ります。

 bin … 実行ファイルが格納されます

 pkg … ライブラリファイルが格納されます

 src … ソースコードが格納されます

今時は、https://github.com/usernameリポジトリもってて、世界に向かってコードを公開してブイブイいわすのが普通なので(笑)

 src/github.com/username/ までディレクトリを作ります。

  • 次に、Workspaceを示す環境変数 GOPATH を設定します。.bashrc(または.cshrc)に書いておきます。

 export GOPATH=$HOME/golang(または setenv GOPATH $HOME/golang) 

  • 最初のプログラムを書きます。

 src/github.com/username/パッケージ名/ となります。ここでは、

「Hello, world.」を出力するプログラムを書きます。完全な写経です。

  • go install を実行します

 エラーがなければ、binディレクトリの下に、hello という実行形式のファイルが作成されました。実行すると「Hello, world.」と表示。成功です!!

  • ライブラリの作成

平方根を計算するライブラリをsrc/github.com/username/newmathの下に  sqrt.go  を書きます。同じディレクトリで、go build を実行します。

 $GOPATH/pkg/(OS名)/github.com/username/newmath/sqrt.a

が、作成されます。

さきほどのプログラムを一部変更して、newmath.Sqrtを呼びます。

func main() {
	fmt.Printf("Hello, world.  Sqrt(2) = %v\n", newmath.Sqrt(2))
}

 実行すると、「Hello, world. Sqrt(2) = 1.414213562373095」と表示。成功!

※ここで、ライブラリのMethodを呼ぶときは、最初の文字は必ず大文字にすること。仕様です。 fmt.Pintln newmath.Sqrt

      f:id:TanabataNikki:20111127082435j:plain  ちょっと休憩。

  • 自動整形ツール

軽めの話題で、自動整形ツール。ソースコードのインデントをそろえたり、importライブラリの順番を入れ替えたりしてくれます。

 % go fmt

と入力すると、そのディレクトリにあるソースコードを整形してくれます。(実体は、gofmt -lw です。gofmtのオプションは調べて下さい) 

  • お楽しみのテストです

自分の作ったライブラリをテストするテストコードを書きます。Golangの組み込みのtestingパッケージを使います。

 

package newmath

import "testing"

func TestSqrt(t *testing.T) {
    const in, out = 4, 2
	if x := Sqrt(in); x != out {
		t.Errorf("Sqrt(%v) = %v, want %v", in, x, out)
	}
}

 - Testのあとに関数名を書く

 - t.Errorf()がエラー表示関数

 % go test

を入力する。

成功した場合、「ok       github.com/username/newmath  0.123s」

失敗した場合、「--- FAIL: TestSqrt (0.00seconds)」

と表示する。

 

世の中、テストファーストなどということもあるわけで、

  const in, out = 9, 3

  const in, out = 5, 2

などといろいろかえてみるのもいいと思います。

昨日は、話題のアニメ、カゲプロがはじまったらしいので、よくわかりませんが、貼っておきます。

f:id:TanabataNikki:20140414014236j:plain

PS. 

 for文は条件をそのあとに書くものでしょう。

 if文も条件を書くものでしょう。

 golangにおけるローカル変数初期化代入機能:= があるために、

  sum :=0; for i:=1; i < 1000; i++ { sum += i }

 という表現が可能になる。

  if x:= f(y); x != 0 { return y / x }

 if文の表現が簡潔になる。