概要
Goは、とてもドキュメントが充実しています。
にいけば、チュートリアルからWikiやらEffective Goなどがあるので
他の言語を知っているエンジニアからすると、習得はしやすそうな感じ。
とりあえず、自分のGo言語勉強として、
からやっていこうと思います。インタラクティブにチュートリアルが進むので
とても分かりやすいですね。
Hello World
どの言語でも最初はHello Worldです。A Tour of Go でも例にもれず最初はこれです。
package tutorial import ( "fmt" ) // HelloWorld は、 [A Tour of Go](http://bit.ly/2HsCMiG) の 要約. func HelloWorld() error { // ------------------------------------------------------------ // Hello World // 文字列を出力するには、 fmt パッケージの Println() などを使う // ------------------------------------------------------------ fmt.Println("Hello World") return nil }
try-golang/tutorial_gotour_01_helloworld.go at master · devlights/try-golang · GitHub
ソースレイアウトは上から順に
- パッケージ
- インポート
- 関数
ってなってますね。
Goは、C#やJavaのように戻り値を前に書くのではなくて、後ろに書きます。Python で type hint 入れる場合と同じ感じ。
引数も同じ。変数の宣言時の型の指定も同じで、前じゃなくて後ろに型を書きます。
func f(x int) string { var s string = fmt.Sprintf("%d", x) return s }
インポートの部分では、利用するパッケージを宣言します。
上のサンプルでは、fmt
パッケージを利用すると宣言していますね。
fmt
パッケージは標準パッケージの一つです。
標準パッケージについては
を参照します。
エントリーポイント (main関数)
Goでエントリーポイントは、mainという名前の関数を main パッケージの中に作ります。
package main import "fmt" func main() { fmt.Println("hello world") }
パッケージ
Goでは、パッケージについて以下の約束があります。
- Go の プログラムは、パッケージで構成される
- プログラムは、必ず main パッケージから開始される
- 一つのディレクトリ内に一つのパッケージしか含めることが出来ない
特定のディレクトリの下に、例えば package main
ってソース置いたら、そのディレクトリには main
パッケージしかおけないってことですね。
他のパッケージのソース作りたい場合は、別の場所にディレクトリつくって置くか、サブディレクトリ掘って置くということです。
この辺は他の言語でも、大きな違いはないですね。
ビルドと実行とお掃除
Goでビルドやテストなどは、当然 go
コマンドを使います。
ビルドは、main関数が存在するディレクトリに移動して
go build
ってしたらコンパイルされます。GoはC#やJavaなどと違い中間言語を出力せず、そのOS上で直接実行できるバイナリを出力してくれます。
なので、コンパイルして生成されたバイナリファイルは、Goがインストールされていない環境でも実行できます。
この辺は、ちょっとしたツールつくって配布したりするときに、とても便利ですね。
ビルドして、実行って過程を踏まなくても
go run main.go
という風に、直接実行することもできます。この場合、ビルドファイルは生成されません。
Goには、ビルドと別にインストールという概念があって
go install
ってすると、ビルドして、出来たバイナリを $GOPATH/bin
の下に配置してくれます。
公開されているGoで作成されたツールなどをgo get
でインストールしたりする場合も
実行可能バイナリの場合は $GOPATH/bin
の下に配置されます。
ビルドファイルをお掃除する場合は
go clean
ってします。
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場