多くのプログラミング言語では、デフォルト パラメーターの機能がサポートされています。コードをより簡潔にし、冗長なコードの重複を減らし、コードの可読性と保守性を向上させることができます。 golang では、デフォルト パラメーターのネイティブ サポートはありませんが、いくつかの方法でシミュレートできます。この記事では、golang でデフォルトのパラメーター関数を実装する方法を説明します。
1. 構造体を使用する
構造体を使用すると、デフォルトパラメータの機能を実現できます。 golang では、構造体は複数のデータ フィールドを結合し、初期値を割り当てることができる複合データ型です。構造体を仮パラメータとして関数に渡して、デフォルト パラメータの機能をシミュレートできます。
サンプル コードは次のとおりです。
type Options struct { Name string Age int Address string } func foo(opts Options) { if opts.Name == "" { opts.Name = "defaultName" } // ... } func main() { opts := Options{ Name: "Tom", Age: 20, } foo(opts) }
上記の例では、構造体 Options
を使用します。この構造体には、次の 3 つのフィールドが含まれています: Name
、 年齢
と住所
。 foo
関数では、opts.Name
が空かどうかを判断することで、デフォルト値を使用するかどうかを決定できます。 main
関数では、Name
と Age
の 2 つのフィールドの値のみを設定し、Address## のデフォルト値は設定します。 # フィールドは空の文字列です。
func Bar(name string) { fmt.Println(name) } func BarWithNameAndAge(name string, age int) { fmt.Printf("%s is %d years old ", name, age) } func main() { Bar("Tom") BarWithNameAndAge("Tom", 20) }
Bar と
BarWithNameAndAge を定義しました。関数名は同じですが、パラメータリストが異なります。関数
Bar を呼び出すとき、パラメータ
name を 1 つだけ渡す必要があります。このとき、関数呼び出し時の
age のデフォルト値は 0 です。
BarWithNameAndAge の場合、
name と
age という 2 つのパラメータを渡す必要があります。複数の関数を定義して関数のオーバーロードをシミュレートすることで、デフォルト パラメーターの関数も簡単に実装できます。
... 構文を使用して変数パラメータを宣言できます。変数パラメータは任意の数のパラメータを受け取ることができ、それによってデフォルト パラメータの機能をシミュレートできます。
func Foo(args ...int) { if len(args) > 0 { // ... } } func main() { Foo() Foo(1) Foo(1, 2) }
args を受け取る関数
Foo を定義します。関数本体では、
len(args) の値に基づいて渡されるパラメータの数を判断し、デフォルトのパラメータを使用するかどうかを決定できます。パラメーターが渡されない場合、
args は空のスライスになります。可変パラメーターを使用すると、デフォルト パラメーターの機能を簡単にシミュレートできます。
type Options struct { Name string Age int Address string } type OptionFunc func(*Options) func WithName(name string) OptionFunc { return func(opt *Options) { opt.Name = name } } func WithAge(age int) OptionFunc { return func(opt *Options) { opt.Age = age } } func WithAddress(address string) OptionFunc { return func(opt *Options) { opt.Address = address } } func NewOptions(opts ...OptionFunc) *Options { opt := &Options{} for _, o := range opts { o(opt) } return opt } func Foo(opts *Options) { if opts.Name == "" { opts.Name = "defaultName" } // ... } func main() { opts := NewOptions(WithName("Tom"), WithAge(20)) Foo(opts) }
Options を定義しました。この構造体には、
Name、
Age ## という 3 つのフィールドが含まれています。 # と アドレス
。 3 つの関数 WithName
、WithAge
、WithAddress
を定義しました。これらはすべて関数タイプ OptionFunc
を返し、この関数は対応するオプションを設定します。また、関数 NewOptions
も定義します。この関数は、変数パラメーター OptionFunc
を受け取り、パラメーター リストを走査することで Options
のオプションを設定し、Options# を返します。 ## ポインタ。最後に、関数
Foo が定義されます。この関数は、
*Options 型のポインター パラメーターを受け取り、
opts.Name が正しいかどうかを判断して、デフォルト値を使用するかどうかを決定します。空の。
main 関数では、
NewOptions 関数を使用して 2 つのオプション
Name と
Age を設定し、
Foo に渡します。 処理用の関数。
構造体と関数のオーバーロードを組み合わせて使用すると、オプションを非常に簡単に設定でき、必要に応じて新しいオプションを追加したり、既存のオプションを変更したりできます。
この記事では、golang でデフォルト パラメーターを実装する 3 つの方法、つまり構造体、関数のオーバーロード、変数パラメーターの使用について説明します。これらの方法にはそれぞれ長所と短所があり、特定のシナリオのニーズに応じて選択できます。実際のプログラミングでは、必要に応じてこれらを組み合わせて、より良い結果を得ることができます。
以上がGolang はデフォルトパラメータを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。