Go言語にはオプションパラメータの機能はありません。しかし、構造体のインスタンス化関数に別の構造体を使ってオプションパラメータを表現することができます。
構造体を使用するとフィールドが欠落している場合そのフィールドの既定値を設定することができます。if文で地道に設定していく感じです。
それでは以下がオプションパラメータのサンプルコードです。
type MyStruct {
Field1 string
Field2 int
Field3 bool
}
type Options struct {
Field1 string
Field2 int
Field3 bool
}
func NewWithOptions(options Options) *MyStruct {
// パラメータが欠落している場合、既定値を設定する
if options.Field2 == 0 {
options.Field2 = 10
}
if options.Field3 == false {
options.Field3 = true
}
// MyStructを初期化する
myStruct := &MyStruct{
Field1: options.Field1,
Field2: options.Field2,
Field3: options.Field3,
}
return myStruct
}
// 以下のように使用できる
options := Options{
Field1: "foo",
}
myStruct := NewWithOptions(options)
上の例ではOptions
構造体を定義してNewWithOptions
関数を定義しています。NewWithOptions
関数では、Options
構造体をパラメータとして受け取り、フィールドが欠落している場合は既定値を設定し、MyStruct
を初期化して返します。
Options
構造体を使用すると必要なフィールドのみを設定し他のフィールドは既定値に任せることができます。
まとめ
PHPやRubyなどを使い慣れているエンジニアにとっては少し冗長というか手間のかかるコードですが、このようにして構造体にオプションパラメータのように振る舞う機能を作ることができます。