アプリケーションを構築する前に、まず基本となるプログラムの書き方から始めます。建築の基礎を理解しないと家が建てられないように、基本的なプログラムを理解せずにはアプリケーションの構築もできません。そのため、本章では最も基本的な文法を学習し、Goプログラムを実行してみます。
大半のプログラミング言語では、まず初めにhello world
を出力するプログラムの書き方を学びます。
用意はいいですか?Let's Go!
package main
import "fmt"
func main() {
fmt.Printf("Hello, world or 你好,世界 or καλημ ́ρα κóσμ or こんにちはせかい\n")
}
以下のように出力されます:
Hello, world or 你好,世界 or καλημ ́ρα κóσμ or こんにちはせかい
まず我々は、Goプログラムはpackage
で構成されている、ということを理解する必要があります。
package <pkgName>
(我々の例ではpackage main
)の1行は現在のファイルがどのパッケージの属しているかを表しています。またパッケージmain
はこれ自体が独立して実行できるパッケージであることを示しています。コンパイル後実行可能ファイルが生成されます。main
パッケージを除いて、他のパッケージは最後には*.a
というファイルが生成され(パッケージファイルとも呼ばれます。)、$GOPATH/pkg/$GOOS_$GOARCH
に出力されます。(Macでは$GOPATH/pkg/darwin_amd64
になります。)
それぞれ独立して実行できるGoプログラムは必ず
package main
の中に含まれています。このmain
パッケージには必ずインターフェースとなるmain
関数が含まれます。この関数には引数がなく、戻り値もありません。
Hello, world...
と出力するために、我々はPrintf
関数を用います。この関数はfmt
パッケージに含まれるため、我々は3行目でシステム固有のfmt
パッケージを導入しています:import "fmt"
。
パッケージの概念はPythonのpackageに似ています。これには特別な利点があります:モジュール化(あなたのプログラムを複数のモジュールに分けることができます)と再利用性(各モジュールはすべて他のアプリケーションプログラムで再利用することができます)。ここではパッケージの概念を理解するにとどめ、あとで自分のパッケージを書くことにしましょう。
5行目では、キーワードfunc
を通じてmain
関数を定義しています。関数の中身は{}
(大括弧)の中に書かれます。我々が普段CやC++、Javaを書くのと同じです。
main
関数にはなんの引数もありません。引数が存在する関数や、0個または複数の値を返す関数の書き方は後で学ぶことにしましょう。
6行目では、fmt
パッケージに定義されたPrintf
関数をコールします。この関数は<pkgName>.<funcName>
の形式でコールされます。この点はPythonとよく似ています。
上述の通り、パッケージ名とパッケージが存在するディレクトリは異なっていてもかまいません。ここでは
<pkgName>
がディレクトリ名ではなくpackage <pkgName>
で宣言されるパッケージ名とします。
最後に、出力した内容には多くの非ASCIIコードが含まれていることにお気づきかもしれません。実際、Goは生まれながらにしてUTF-8をサポートしており、いかなる文字コードも直接出力することができます。UTF-8の中の任意のコードポイントを識別子にしても構いません。
Goはpackage
(Pythonのモジュールに似ています)を使用してコードを構成します。main.main()
関数(この関数は主にメインパッケージにあります)は個別に独立した実行可能プログラムのインターフェースになります。GoはUTF-8文字列と識別子(なぜならUTF-8の発明者もGoの発明者と同じだからです。)を使用しますので、はじめから多言語サポートを有しています。