Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
パッケージ / import
Goのコードはパッケージ(package)単位で管理されます。ファイルの先頭に『package』宣言を書き、他のパッケージを使うときは『import』で読み込みます。パッケージの公開・非公開は識別子の先頭文字の大文字・小文字で決まります。
構文
// パッケージ宣言です。ファイルの先頭に書きます。
package main
// 単一インポートです。
import "fmt"
// 複数インポート(グループ化推奨)です。
import (
"fmt"
"math"
"strings"
)
// エイリアスを付けてインポートします。
import f "fmt" // f.Println() で使えます。
// ブランクインポート:初期化処理だけ実行します(使わない場合はコンパイルエラーを回避)。
import _ "image/png"
// ドットインポート:パッケージ名なしで使えます(非推奨)。
import . "fmt" // Println() のように書けます。
// 大文字始まりの識別子は外部から参照できます(エクスポート)。
func PublicFunc() {} // 他パッケージから呼べます。
func privateFunc() {} // 同じパッケージ内でのみ使えます。
パッケージ関連のルール一覧
| 項目 | 内容 |
|---|---|
| package 宣言 | 各ファイルの先頭に必須です。同じディレクトリのファイルは同じパッケージ名を使います。 |
| main パッケージ | 実行可能プログラムのエントリポイントです。main()関数が必要です。 |
| エクスポート | 大文字で始まる識別子(関数・型・変数・定数)が他パッケージから参照できます。 |
| 未使用のインポート | コンパイルエラーになります。使わないときは _ を使います。 |
| 循環インポート | AがBをインポートし、BがAをインポートする循環は禁止です。 |
| 内部パッケージ | internal/ ディレクトリ内のパッケージは親ディレクトリ以下からのみインポートできます。 |
サンプルコード
// ファイル: main.go
package main
import (
"fmt"
"strings"
// エイリアスを使う例です。
m "math"
// ブランクインポート:side effectのためだけにインポートします。
_ "net/http/pprof"
)
// Greeting は外部からも使えるエクスポートされた関数です。
func Greeting(name string) string {
return "Hello, " + name + "!"
}
// greet は同パッケージ内でしか使えない非公開関数です。
func greet(name string) {
fmt.Println(Greeting(name))
}
func main() {
// 標準パッケージを使います。
fmt.Println("=== パッケージとインポートの例 ===")
// strings パッケージを使います。
s := " Hello, Go! "
fmt.Println("Trim:", strings.TrimSpace(s))
fmt.Println("Upper:", strings.ToUpper(s))
// エイリアスを付けた math パッケージを使います。
fmt.Printf("Pi: %.4f\n", m.Pi)
fmt.Printf("Sqrt(2): %.4f\n", m.Sqrt(2))
fmt.Println()
// エクスポートされた関数を呼び出します。
fmt.Println(Greeting("World"))
// 非公開関数は同じパッケージ内から呼べます。
greet("Go")
}
概要
Goのパッケージシステムはシンプルかつ厳格です。未使用のインポートはコンパイルエラーになるため、常にコードが整理された状態を保てます。インポートパスはモジュール名から始まるフルパスで書きます(例: 『"github.com/user/repo/pkg"』)。
パッケージ名は通常ディレクトリ名と一致させますが、必須ではありません。慣習として短くシンプルな名前(小文字、アンダースコアなし)を使います。
ドットインポート(import . "pkg")はパッケージ名が省略できて便利ですが、どのパッケージの識別子かわかりにくくなるため、通常のコードでは使わないことを推奨します。
モジュールの依存管理は『Go Modules』を、よく使うGoコマンドは『go build / run / test』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。