# Golangでよく見かける構造体実装パターン
よく見かけるパターンをまとめてみた.
#
コンストラクタとしてのNewXXXX()
構造体の初期化と生成に使うパターン
https://play.golang.org/p/7PCxyYTCwek
- 👍 構造体の生成と初期化の内部実装を利用者に見せない
- 👍 構造体そのものの構造を利用者に見せない
# エクスポートして外部パッケージからのアクセス許可を利用したシングルトン
「構造体名の先頭を大文字にすることで外部パッケージからのアクセスを許可する」というGolangの特徴を生かしてシングルトンを生成できる.
| |
#
interfaceでポリモーフィズム
Golangには「型の継承」がない.一方で,interfaceを用いることでポリモーフィズムを実現できる.interfaceによって振る舞いを定義することで,「同じような振る舞いをするもの」をまとめて扱えるようになる.
https://play.golang.org/p/p-yY5gEOdaG
# 構造体の埋め込みによるポリモーフィズム
ある構造体に対して,特定の振る舞いを実装している構造体を埋め込むことで,その構造体も「埋め込まれた構造体と同様な振る舞いをするもの」として扱うことができる.ただ,これをやると構造体の初期化時に構造体の内部を意識する必要があるため,初期化のためのNewXXXX()を用意してあげると良い.
https://play.golang.org/p/MsxaudYhObv
# 埋め込まれた構造体が上位の構造体の関数を使う
オブジェクト指向では「子クラスが親クラスのメソッドを用いること」ができるが,Golangでもできないことはない.
https://play.golang.org/p/cQ4uSQ7_TLl
# 構造体による処理の移譲
構造体のメンバーとして,特定の処理に対して責任を持つ構造体を持つことで,処理の移譲を実現できる.
https://play.golang.org/p/KPX9i1sY1CK
# 関数による処理の移譲
Golangでは関数は第1級市民なので値として扱うことができる.処理を定義した関数をやりとりすることで処理を移譲させることができる.