helloworlds

not a noun, it's a verb

【Go】helloworldで最も基本的な構文を抑える

Golangの"HelloWorld"で最も基本的な構文を覚えていきたいと思います。

今回参考にするのはこの技術書です!

スターティングGo言語 (CodeZine BOOKS)

スターティングGo言語 (CodeZine BOOKS)

versionですが、私は1.9.2使用します。

golangでは、プロジェクト毎にversion管理したい場合、gvmというものがあるので、 そちらで切り替えて挙動を検証することが可能です!

過去記事でgvmのインストールも紹介しているので宜しければ観覧してみて下さい!

o21o21.hatenablog.jp

さっそく基本構文に...と、いきたいところですが、 きまりのそもそも系を先にまとめます。

Go

Go言語は、Googleによって開発されたプログラミング言語である。 2009年に発表されたので、まだまだ新しい言語ですね~。

そして、コンパイル型の言語です。

仮想マシンを備えていなく、実行環境が不要です。 オーバーヘッドが少ないことも1つの特徴でしょう。

いろんなOSにおける最も標準的な共有ライブラリさえ依存しない実行ファイルを生成します。

よく並行処理なんて言葉を見聞きするかと思いますが、 Goの場合は、ゴルーチン(goroutine)という並行処理の枠組みになります。 OSが提供するスレッドよりも小さな単位で動作するGO独自の実行単位です。 チャンネルというデータ構造を組み合わせされるようにデザインされています。

色々特徴がありますが、ネイティブコードにコンパイルされた上で実行されるので 一般的なスクリプト言語より何十倍もパフォーマンスが高いって覚えておきましょう。笑

これくらいにしてHello Worldをします。

いきなりコード

実行環境やGOPATHに関数ことは、過去記事に記載してあるのでそちらを参照して下さい。

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello World!!!")
}

上記プログラムをhello.goというファイル名で保存。

当ファイルがあるディレクトリで、

$ go run hello.go

として、Hello World!!!と返ってきたら成功です。

go runコマンドは、ビルドプロセスをコンソール上に出力させずに直接プログラムを実行できます。

次にプログラムの中身について見ていきます。

package

package main

変数や関数などプログラムのすべての要素は、パッケージに属すということを覚えておきましょう。 また、1ファイルに複数のパッケージの宣言はエラーがかえってきます。 なので、上記のコードだと「このファイルはmainパッケージですよ」ということを宣言しています。

import

import (
    "fmt"
)

Goのライブラリは、すべて固有の名前を持つパッケージとして提供されています。 今回は「fmtパッケージをインポートします」といっていますね。

また、Goのポリシーで不要なパッケージ(プログラムで宣言されてはいるが、使用されていないパッケージ)があると、コンパイルエラーがかえってきます。

このコンパイルエラーの回避は以下の書き方で回避できます。(パッケージ名前にアンダーバー)

import (
    _ "fmt"
)

エントリーポイント

こちらはコードを書いたことがことがある人ならば問題なさそうなので飛ばします。

ビルド

$ go build -o helloworld hello.go

上記コマンドで実行ファイルが作成されます。 -oオプションは、実行ファイル名の指定ですので、私は付けることをおすすめします。

無事、実行ファイルができたらあとはそのファイルを実行するだけです!

$ ./helloworld
Hello World!!!

完了です!

この実行ファイルですが、ただHello World!!と返すだけなのに、 容量が多いことに気付きます。

これは、記事上部で説明にある通り、OSのライブラリに依存しないためです。 ランタイム本体と指定したパッケージの機能すべてが実行ファイルの中に格納されているというわけです。

以上