おまぬけ活動日誌

最近のツッコまれどころ

この日誌から Google してもらう


2013年12月21日(Sat) 公園で子どもたちと鬼ごっこ [長年日記]

[golang] Goのテストツール

GoとC++で作るB木シリーズ。やっとこgo testでB木のテストが動いたので今日はgo testの動作を掘り下げてみた。 go testでは*_test.goのテストケースが実行される。 テストされるコードは、 *.goから読まれたうちの、packageの記述が合っているもののようだ。 そして、テストケース内の名前空間は、 テストされるコードの名前空間と同じみたい

してみると「Go is a tool for managing Go source code.」 サブコマンドとしては、build、clean、…、testなどがあるとのこと。

あー。だからバイナリとかカレントディレクトリには見えなかったのか。

実行される側のソースコードはどういう風になってるんだろう。 普通のGoプログラムは実行を始める場所に package mainを記述してfunc main()を 定義しないといけないようだけれど、btree_test.goにはどちらも無い。 代わりに、package btreeという記述がある。 これは、btree.goというファイル名に対応してるのかな? それともbtree.go内のpackage btreeという記述に対応してるのかな? 試してみる。

最低限packageの行があれば実行はできるようだ。 もう少し何かを実行してもらうには…zunuda_test.goに内容を下記のようにすると

下記のように実行された。 カレントディレクトリには他のファイルは置いていない。

package zundaの行はどのように活用されるのかな。 Pythonみたいにパッケージ名とファイル名を一致させる必要があるのかな。 とりあえずzunda.goにpackage zundaを書いてみる:

packageが一致してると呼び出し元からは指定する必要はないようだ。 zunda_test.goを下記のようにして

go testすると「Hello World」が表示されるが、 Greet()zunda.Greet()とすると

となる。ではファイル名を変えてみると…

ファイル名は関係なく、 *.goからpackage zundaを頼りにコードを読んでるようだ。

蛇足。importの時はファイル名とpackageとどちらを気にするのかな。 greet.goを用意して:

あれ、8gもgccgoもないよ?gccgoをapt-get installしました。

おや。zundaをimportできるようにするにはどうするんだ? というかpackage mainがカレントディレクトリにあると go testもうまくいかなくなるのだね。

Goのパッケージ?のつくりかたについて勉強する必要がありそうですね。


作り手とその取り巻きだけが楽しんでる間は本物じゃない。その中身が理解できない人々の生活を変えてこそ本物だ


zunda <zunda at freeshell.org>