Goでは、アプリケーションはパッケージによって構成されます。 パッケージとは、同じフォルダーにあるソースファイルをまとめたものです。 フォルダー内のソースファイルはすべて、ファイルの先頭に同じパッケージ名を書く必要があります。 慣習として、パッケージには、それが置かれているフォルダーと同じ名前を付けます。
package greeting
Goには、豊富な標準ライブラリのパッケージが用意されており、importキーワードを使ってプログラムで利用できます。
標準ライブラリのパッケージは、その名前を使ってインポートします。
package greeting
import "fmt"
複数のパッケージは、括弧(())で囲むことで一度にインポートできます。
package greeting
import (
"errors"
"fmt"
)
サードパーティのパッケージは、そのパッケージがある場所のURLを使ってインポートします。 インポートするときに、パッケージに別名を付けることができます。 これは、パッケージ名の衝突を避けるのに使えます。
package greeting
import (
"errors"
errs "github.com/pkg/errors"
)
インポートしたパッケージは、パッケージ名または別名で参照します。
// using the internal errors package
errors.New("Connection not established")
// using the errors package located at github.com/pkg/errors by alias
errs.New("Connection not established")
ある要素がほかのパッケージのコードから呼び出せるかどうかは、Goがその宣言のしかたによって判断します。
関数、型、変数、定数を外部から見えるようにするには(これをexportedと呼びます)、名前を大文字で始める必要があります。
これは、publicやprivateのようなアクセス修飾子を使うJavaなどのほかのプログラミング言語とよく似ています。
package greeting
// Hello is a public function (callable from other packages).
func Hello(name string) string {
return "Hello " + name
}
// hello is a private function (not callable from other packages).
func hello(name string) string {
return "Hello " + name
}
独自のstruct型のフィールド名も同じです。大文字で始まるフィールド名は外部から見え、小文字で始まるものは見えません。