見出し画像

golang ファクトリ関数/コンストラクタ 使い方と注意点

Go言語では他のプログラミング言語にあるような「コンストラクタ」機能はないですが、ファクトリ関数を使うことでコンストラクタと同じような役割を持たせることができます。

ということで今回はファクトリ関数の使い方と注意点について紹介していきます。

コンストラクタとは

そもそもコンストラクタとは、クラスや構造体のインスタンスが生成される際に自動的に呼び出される関数のことです。

コンストラクタの目的は、新しいオブジェクトの初期化にあります。
オブジェクトの初期状態を設定し、必要なリソースを確保したり、初期値を代入したりすることができます。


ファクトリ関数とは

Go言語ではコンストラクタがない代わりにファクトリ関数を用いることが多いです。

ファクトリ関数はコンストラクタのように働き、新しいインスタンスを生成して返します。構造体やその他の型のインスタンスを作成する際にファクトリ関数を使用します。


ファクトリ関数の使い方

実際にファクトリ関数をどのように使うか見ていきます。

type Person struct {
    Name string
    Age  int
}


func NewPerson(name string, age int) *Person {
    return &Person{
        Name: name,
        Age:  age,
    }
}

func main() {   
    p := NewPerson("Alice", 30)
    fmt.Println(p)
}

NewPerson()はPerson型の新しいインスタンスを作成し、引数で受け取った値でそのフィールドを初期化します。そして、初期化されたPersonのポインタを返します。

上記コードの出力結果は&{Alice 30}となります。

ファクトリ関数を使用することで、オブジェクトの生成ロジックを隠蔽し、使用する側からはシンプルに見えるというメリットがあります。また作り方によってはインスタンス生成時のバリデーションや特定のロジックを、ファクトリ関数内で実装することもできます。


ファクトリ関数の注意点

ポインタか値か

ファクトリ関数では構造体のポインタを返します。
そのためメモリ効率が良くなり、大きなオブジェクトのコピーを避けることができます。

しかし、オブジェクトが小さく、共有される可能性が低い場合は、値として返す方が適しているケースもあります。


バリデーション

ファクトリ関数内でパラメータのバリデーションを行う場合は、不正な状態のオブジェクトが生成されるのを防ぐためにも適切なエラーを返すことが必要です。


golangをもっと詳しくなりたい方に

初めてのGo言語

Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。


詳解Go言語Webアプリケーション開発

こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。

以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。


【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)

まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。

この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。


現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発

個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

この経験に学べ

この記事が気に入ったらサポートをしてみませんか?