# 2.1 こんにちは、Go

アプリケーションを書き始める前に、まず基本となるプログラムから始めます。家を建てようとする前に建物の基礎がどういったものかわからないのと同じように、プログラムの編集もどのように始めたらよいのかわからないものです。そのため、本章では、最も基本的な文法を学習し、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の発明者と同じだからです。）を使用しますので、はじめから多言語サポートを有しています。

## links
   * [目次](<preface.md>)
   * 前へ: [Go言語の基礎](<02.0.md>)
   * 次へ: [Goの基礎](<02.2.md>)
