Go初心者向けの投稿です。
まずはGo言語を始めるにあたっての簡単なコマンドとテストコードを書いて実行しています。
go run
「Hello,world!」をGoで書くと次のようになります。
package main
import (
"fmt"
)
func main () {
fmt.Println("Hello,World!")
}
$go run hello.go
Goは基本的にコンパイルを前提としているがgo run
コマンンドでビルドプロセスを隠蔽できます。便利ですね。
参照のないパッケージについて
Goでは使用していない不要なパッケージがimportされているとエラーになります。
これはプログラムにゴミを残さないためにも大切ですが、エラーになるのが面倒な場合は下記指定「アンダーバー」でバイパスが可能です。
import (
_ "fmt" // 参照されないパッケージを取り込む方法
)
go build
hoge.goファイルをコンパイルして実行ファイルを作成することが出来ます。
$ go build -o hoge hoge.go
ビルドに成功するとGoプログラムと同じディレクトリに実行ファイルが作成されます。
go run と go buildの違い
go run
も go build
もコンパイルして実行ファイルのの作成をしてくれるが、go run
の場合go build
のようにカレントディレクトリ以下のすべてのファイルが読み込まれるわけではないです。
goの実行ファイルはgoファイルよりも容量が大きくなる
GoはOSによって提供される標準的なライブラリに依存されないようにするため、プログラムが必要とするパッケージを実行ファイルの中に組み込んでいます。
そのため容量は大きくなります。
パッケージとディレクトリ
Goでは「1つのディレクトリには1つのパッケージ定義のみ」という原則があります。
この原則に従わない状態でビルドを行うとエラーになります。
実際に動かしてみよう
package main
import (
"fmt"
"./animals"
)
func main() {
fmt.Println(animals.CatCry())
fmt.Println(animals.DogCry())
fmt.Println(animals.RabitCry())
}
package animals
func CatCry() string{
return "nya---n"
}
package animals
func DogCry() string{
return "wanwan!!!"
}
package animals
func RabitCry() string {
return "usagidayo--!!!"
}
簡単なファイルが用意できたらgo run
で動かします!
$ go run main.go
nya---n
wanwan!!!
usagidayo--!!!
想定通りに動いてますね。
testの記載方法について
goには標準でパッケージの機能をテストするための機能が組み込まれています。
package animals
import (
"testing"
)
func TestCatCry(t *testing.T) {
expect := "nya---n"
actual := CatCry()
if expect != actual {
t.Errorf("%s != %s", expect, actual)
}
}
testの実行
$ go test ./animals
ok _/hello-go/animals 0.006s
okとなっているので成功しているのが解ります。
せっかくなのでコードを変えて失敗させてみます。
変更前:
expect := "nya---n"
変更後:
expect := "wawanwanda-"
変更したらバチーンとtestコマンドを実行します。
$ go test ./animals
--- FAIL: TestCatCry (0.00s)
animals_test.go:12: wawanwanda- != nya---n
FAIL
FAIL _/hello-go/animals 0.006s
FAILとなってテストが失敗しているのがわかります。どこで失敗しているのかも出ているので簡単に追えますね。
まとめ
はじめてGoに触れましたが、コマンドが豊富で記載も簡潔。開発者に優しい設計になっていますね。これからどんどん触ってどんどん投稿していきます。