🦔

【go超初心者】packageとClassって違うの?

2024/02/29に公開

この記事のゴール

本記事では超初心者がgoのpackageについてザル理解します。
※ザル理解とは乱暴にざっくり理解することを指す。

大目的は『ginのサンプルコードを日本語で言語化する。』ですが、
見返すときに読みやすい記事にしたいので、記事を小分けにして書いています。

毎度の事ながら、参考記事を読んでください。。。(本当良い記事です)

背景

筆者はgoの超初心者です。
以前goのプロジェクトを作成しました。
https://zenn.dev/articles/5d66741a60b24e/edit
goの基本的な言語仕様とginおよびgoの実行環境について少しでも知りたいという動機です。

結論

違う!

packageという概念

ginのサンプルコードに初っ端に出てくる。
goを理解するうえで大事に違いない!(と思った)

package main

Classとは根本的に違う!

結論をいうとオブジェクト指向のClassとは根本的に異なる概念。
そもそもgoにはClassという概念はない。

ただ、オブジェクト指向をやっている人なら比較すると解りやすいと思ったので、
比較しながらgoについて知っていこうと思う。

似ているところ

コードの組織化

どちらもコードの組織化に貢献するという意味では似ている。
Classはメソッドやデータをまとめるのに対し、
packageは関連するコードやリソースをまとめる。

名前空間の提供

どちらも名前空間を提供し、同じ名前の要素が衝突するのを防ぐ。
これに関しては同じ役割といえると思う。

根本的に違うところ

カプセル化と継承

Classはカプセル化と継承という概念を持ち、データの隠蔽や再利用性の向上に貢献する。
一方で、packageはこれらの概念を直接サポートはしてない。

インスタンス化

Classは自身から複数のインスタンスを作成することができる。
一方、packageはインスタンス化されることはない。
代わりに、他のパッケージから利用されることはる。

まとめ

オブジェクト指向プログラミングという観点

そもそもClassはオブジェクト指向プログラミングの概念。
先にも挙げた通り、Classはデータとそれに関連する振る舞い(メソッド)を組み合わせたものを指すが、
packageは単に関連するコードやリソースをまとめたものである。

つまり、goはオブジェクト指向プログラミング的な側面はあるが、純粋なそれではないっぽい。
とりあえず、packageは単にコードやらリソースをまとめたものと認識しておく。

参考記事:
Go言語のパッケージとモジュールについて
パッケージ (Go入門連載 第1回)

Discussion