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のインスタンスとエラーを返すようになっています。