Go言語プログラミングに必要な、基本的な文法・機能についてまとめました。
Contents
プログラムの構成
Hello World
まず初めにプログラムの基本となるGo言語のHello Worldのソースを示します。このプログラムをもとに機能等を書いていきます。
1 2 3 4 5 6 7 |
package main //パッケージ import "fmt" //インポート func main(){ //main関数 fmt.Println("Hello World") } |
コメント
Go言語のコメントはC/C++と同じ形式で二つあります。
一つ目は // です。これは // 以降の1文をコメントと認識します。
1 2 |
// コメント コメントではない |
二つ目は /* ... */ です。これは /* と */ の間の文字をコメントと認識します。これは複数行にまたがることもできます。
1 2 3 4 5 6 |
コメントではない /* コメント コメント */ コメントではない |
パッケージ
Go言語では定義した関数は変数はパッケージによって管理されます。そのためGo言語でプログラミングをする際にはパッケージの宣言を行う必要があります。
1 |
package main //パッケージ |
パッケージの宣言には二つのルールがあります。
- 一つのファイルに宣言できるパッケージは一つ
- 一つのディレクトリに宣言できるパッケージは一つ(例外あり)
一つ目の「一つのファイルに宣言できるパッケージは一つ」は必ず守る必要があり、同一ファイルないで二う異常のパッケージ宣言がある場合コンパイルエラーとなります。
1 2 |
package main package test //エラー |
二つ目の「一つのディレクトリに宣言できるパッケージは一つ(例外あり)」は必ずしも守る必要はありませんが、守ったほうが便利です。
後で説明しますが、Go言語ではビルド時にファイル名を指定する方法と指定しない方法があります。ファイル名を指定し、単一のファイルだけでビルドする際には同一ディレクトリ内に複数のパッケージがあっても問題ありません。
しかしファイル名を指定せず、分割したファイルをビルドする場合にはコンパイルエラーとなります。プログラム内で複数のパッケージを作成したい場合には、子ディレクトリ等を作成してその中で別のパッケージ宣言をしてください。
1 2 3 4 5 6 7 8 9 10 11 |
エラーの例 main hello-2.go (package test) hello.go (package main) エラーではない main │ hello.go (package main) │ └─test hello-2.go (package test) |
インポート
Go言語に付属するライブラリーや、作成したパッケージを使用するためにはインポート文を宣言します。
1 |
import "fmt" //インポート |
上記の例では入出力に関する機能がまとめられたfmtパッケージをインポートしてます。
複数個のパッケージをインポートする際には次のように書くこともできます。
1 2 3 4 |
import ( "fmt" "パッケージ名" ) |
自作したパッケージのインポートはパッケージのディレクトリ名を書くことで行えます。
1 |
import "./test" |
ちなみにインポートしたパッケージを後の処理で使用しない場合、コンパイルエラーとなります。そのため不要なパッケージのインポートは行わないでください。
main関数
Go言語ではプログラムのエントリーポイントとなるのがmain関数です。
1 2 3 |
func main(){ //main関数 fmt.Println("Hello World") } |
Go言語のエントリーポイントはmainパッケージのmain関数であると決められているので、プログラミングする際には必ず必要となります。
ビルド・実行
Go言語のプログラムを実行するには、ビルドなしの方法とビルドありの方法二つがありますので、開発の状況によって使い分けてください。
ビルドなしの実行
ファイルをビルドしないで実行する方法として go run があります。実行方法は下記の通りです。
1 |
>> go run [ファイル名.go] |
これによって実行ファイルが作成されることなく、プログラムの実行を行うことができます。
ビルド
続いてファイルのビルド方法について説明します。
単一のファイルをビルドする際には次のコマンドで行うことができます。
1 |
>> go build [ファイル名.go] |
これによってファイル名と同名の実行ファイルが作成されます。実行ファイル名を指定したい場合は -o オプションを利用します。
1 |
>> go build -o [実行ファイル名] [ファイル名.go] |
またビルド時にファイル名を指定しなくてもビルドすることができます。しかしその際は一つのディレクトリに一つのパッケージ名等のルールを守る必要があります。
1 |
>> go build |
この時の実行ファイル名はメイン関数があるファイルのディレクトリ名となります。
ユニットテスト
Go言語ではユニットテストも簡単に行うことができます。
説明のためにHelloWorldプログラムを以下のように書き換えました。
1 2 3 4 5 6 7 8 9 10 11 |
package main import "fmt" func hello() string{ return "Hello World" } func main(){ fmt.Println(hello()) } |
このプログラムのユニットテストを行いたいと思います。
テストの作成
まず初めにGo言語でユニットテストを記述していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main inport "testing" funt Testhello(t *testing.T){ expect := "Hello World" result := hello() if(expect != result){ t.Error("%s is not %s.", expect, result) } } |
この時このコードのファイル名の最後を “_test.go” としてください。このような名前にすることでGo言語はテスト用のファイルだと認識します。
テストの実行
テストの実行は下記のコマンドから行うことができます。
1 |
>> go test -v |
関連記事