【Go言語】コンストラクタ関数の中でバリデーションを実行する

Golang

Go言語のコンストラクタ関数内でバリデーションを行う方法とは

Go言語では、コンストラクタ関数 (またはファクトリ関数) 内でドメインオブジェクトの検証 (バリデーション) を行うことができます。

Goでは一般的にコンストラクタ関数と言えば以下のようにNew〇〇という関数になります。

func New〇〇() {}

そしてこの中でバリデーションを行うには、コンストラクタ内でドメインオブジェクトを作成し、そのオブジェクト自信が持つバリデーション 関数を実行することが良いでしょう。

具体的なコード例

以下が、コンストラクタ関数内でバリデーションを行なっているコード例です。

type User struct {
    Name  string
    Email string
}

func NewUser(name string, email string) (*User, error) {
    user := &User{
        Name:  name,
        Email: email,
    }

    if !user.IsValid() {
        return nil, fmt.Errorf("user is invalid")
    }

    return user, nil
}

func (u *User) IsValid() bool {
    if u.Name == "" || u.Email == "" {
        return false
    }
    return true
}

上記の例では、 NewUser というコンストラクタ関数により、 User のインスタンスを生成する際に、IsValid関数を呼び出してバリデーションを行っています。

もしuserインスタンスが有効な場合にはuserインスタンスとnilのエラーを、無効な場合にはnilのインスタンスとエラーを返すようになっています。

タイトルとURLをコピーしました