##一応 前提環境
・macOS
・goenv 2.0.0beta11
・go version go1.15.2 darwin/amd64
##実行方法
今回は定番のHello Worldを実行します。
とりあえず$GOPATH直下にhello.goという名前でファイルを作成し、そこに下記のプログラムを書きます。
package main //パッケージの宣言
import ( //使用するパッケージをインポート
"fmt"
)
func main() { //関数main(エントリーポイント)の定義
fmt.Println("Hello World")
}
そうしたらファイルを作成したディレクトリをターミナルで開き、$ go run hello.go
を入力し、Hello Worldと表示されたら実行成功です。
##ビルド
次はhello.goを実行ファイル形式にコンパイルします。
下記のようにbuildコマンドを入力、-oオプションを使用することで実行ファイル名を指定できます。
$ go build -o hello hello.go
するとhelloという実行ファイルができるので、ターミナルで下記のコマンドを入力するだけでHello Worldが実行できます。
$ ./hello
Hello World
##パッケージのテスト
仮に下記のようなパッケージ構成になっているとして、testsディレクトリの配下のファイルたちをテストするとします。
また、依存モジュール管理ツール Modulesを使用しており、
go mod init github.com/username/testproject
にしてあります。
※go 1.13から取り込まれていますが、go 1.11から移行期ではありますが、export GO111MODULE=on
にすることで使えるようになります。
testproject
│────── tests
│ │────testA
│ │────testB
│ │────testC
│
│────── main.go
まず、testsディレクトリの配下に末尾が**_test.go**終わるようにファイルを作成します。これはパッケージをテストする際に決められたルールです。
例)tests_test.go
下記のようにtests_test.goファイルの内容を書きます。
package tests
import (
"testing"
)
func TestJapaneseSubject(t *testing.T) {
expect := "Japanese"
actual := JapaneseSubject()
if expect != actual {
t.Errorf("%s != %s", expect, actual)
}
}
func TestEnglishSubject(t *testing.T) {
expect := "English"
actual := EnglishSubject()
if expect != actual {
t.Errorf("%s != %s", expect, actual)
}
}
func TestMathSubject(t *testing.T) {
expect := "Math"
actual := MathSubject()
if expect != actual {
t.Errorf("%s != %s", expect, actual)
}
}
それではターミナルでコマンドを入力してテストを実行し、下記のように出力されれば成功です。
$ go test github.com/username/testproject/tests
ok github.com/noa-1129/testproject/tests 0.506s
また、-vオプションをつけるとファイルごとに詳細が確認できます。
$ go test -v github.com/username/testproject/tests
=== RUN TestJapaneseSubject
--- PASS: TestJapaneseSubject (0.00s)
=== RUN TestEnglishSubject
--- PASS: TestEnglishSubject (0.00s)
=== RUN TestMathSubject
--- PASS: TestMathSubject (0.00s)
PASS
ok github.com/username/testproject/tests 0.230s
##最後に
今回パッケージのテストでは依存モジュール管理ツールとしてGo Modulesを使ってテストをしましたが、Go modulesについては次の記事で書こうと思います!