パッケージとモジュール

Go(Golang)の「パッケージとモジュール」は、コードの構造化と再利用性を高めるための重要な概念です。Goはこの仕組みを非常に明確に設計しており、効率的な依存関係管理やビルドを可能にしています。以下で詳しく説明します。


1. パッケージ(Package)

概要

パッケージは、関連するGoファイルをまとめた単位です。Goのすべてのソースコードは何らかのパッケージに属する必要があります。

パッケージの構成

  • .go ファイルの先頭には package 宣言が必要です。

  • 例えば、次のように記述します:

    go
    package main

    または

    go
    package mathutil

特別なパッケージ main

  • main パッケージは、実行可能ファイルのエントリポイントを定義するために使われます。

  • main パッケージ内には func main() が必要です。

パッケージのインポート

他のパッケージを使うには import 文を使用します:

go
import "fmt"

独自パッケージを使用するには、パスを指定します:

go
import "myapp/utils"

2. モジュール(Module)

概要

Go 1.11以降で導入されたモジュールは、複数のパッケージをまとめた単位であり、依存関係管理のための仕組みです。Go Modulesにより、GOPATHの外でも開発が可能になりました。

モジュールの初期化

プロジェクトルートで次のコマンドを実行します:

bash
go mod init example.com/myapp

これにより go.mod ファイルが作成され、モジュール名と依存パッケージの情報が管理されます。

go.modの役割

  • モジュール名(ルートパッケージ名)

  • 依存パッケージとそのバージョン

  • 必要なGoバージョン

例:

go
module example.com/myapp go 1.20 require ( github.com/gorilla/mux v1.8.0 )

依存関係の管理

依存パッケージの追加やバージョン管理は go getgo mod tidy で行います。


3. パッケージとモジュールの関係

  • モジュールはパッケージの集合です。

  • モジュールのルート配下に複数のパッケージを配置できます。

  • モジュールをまたいでパッケージを利用することで、外部ライブラリやプロジェクト間でコードを再利用できます。


4. まとめ

項目 説明
パッケージ 関連するGoソースファイルの論理的なまとまり
モジュール 複数のパッケージをまとめたプロジェクト単位
go.mod モジュールの依存情報を管理するファイル
mainパッケージ 実行可能なプログラムのエントリポイント

生成日:2025/05/03