#17 Goで学ぶモジュールとパッケージの基本

Goのファイル整理の仕組みは「パッケージ」が中心で、以前の記事で触れたgo.modとも深く関わっています。この記事では、Goにおけるパッケージの基本と、実務でのファイル構成の考え方を解説します。

パッケージという単位

Goでは、同じフォルダにあるファイルは、まとめて1つの「パッケージ」として扱われます。ファイルの先頭に、そのパッケージの名前を宣言します。

package utils

func Greet(name string) {
    fmt.Println("こんにちは、" + name + "さん")
}

他のパッケージから使う

import "myproject/utils"

func main() {
    utils.Greet("太郎")
}

importのパスは、go.modに書かれたモジュール名(myproject)から始まり、そのパッケージが置かれたフォルダまでのパスをつなげたものになります。

複数のファイルを1つのパッケージにまとめる

同じフォルダの中であれば、複数の.goファイルに処理を分けても、すべて同じパッケージとして扱われます。

// utils/greet.go
package utils
func Greet(name string) { ... }

// utils/format.go
package utils
func FormatDate(t time.Time) string { ... }

役割ごとにファイルを分けておくと、機能が増えてもコードの見通しを保ちやすくなります。

公開・非公開のルール

以前の記事でも触れた通り、Goでは関数名の先頭が大文字だと公開、小文字だと非公開になります。Greet(大文字)は他のパッケージから使えますが、greet(小文字)は同じパッケージの中でしか使えません。この仕組みは関数だけでなく、変数名・構造体の名前・構造体のフィールド名にも同じように適用されます。

Goならではの注意点

Goのパッケージ名は、フォルダ名と一致させるのが慣習です。また、公開・非公開の区別が「大文字・小文字」というシンプルなルールで決まる点は、他の言語のpublic・privateのようなキーワードとは大きく異なる、Goらしい特徴です。パッケージを設計するときは、外部に見せたい機能だけを大文字で公開し、内部の実装詳細は小文字のままにしておく(隠蔽する)ことを意識すると、使う側にとって分かりやすいパッケージになります。

まとめ

Goはパッケージ単位でファイルを整理し、大文字・小文字で公開範囲を決めます。1つのパッケージを複数ファイルに分割できること、フォルダ名とパッケージ名を一致させる慣習も覚えておきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Goをもっと学びたい方には「Go言語入門」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本