いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-02 (HelloWorld)

概要

Goは、とてもドキュメントが充実しています。

golang.org

にいけば、チュートリアルからWikiやらEffective Goなどがあるので

他の言語を知っているエンジニアからすると、習得はしやすそうな感じ。

とりあえず、自分のGo言語勉強として、

tour.golang.org

からやっていこうと思います。インタラクティブにチュートリアルが進むので

とても分かりやすいですね。

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パッケージは標準パッケージの一つです。

標準パッケージについては

golang.org

を参照します。

エントリーポイント (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

ってします。


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com