Go は関数のオーバーロードをサポートしていますか?
C ライブラリを Go に移行するとき、開発者は可変引数を持つ関数を適応させるという課題に遭遇することがあります。 Go では、C とは異なり、関数のオーバーロードはサポートされていません。
次の Go 関数を考えてみましょう。宣言:
func (e *Easy)SetOption(option Option, param string) { // ... } func (e *Easy)SetOption(option Option, param long) { // ... }
これらの関数は同じ名前を共有しますが、異なるパラメータ型を受け入れます。ただし、このアプローチは Go では許可されていません。コンパイラは、「このブロックで再定義されました」というエラーを報告します。
Go では、型一致の必要性を排除することでメソッドのディスパッチが簡素化されます。異なるシグネチャを持つメソッドをオーバーロードすると、混乱を招き、脆弱になる可能性があると考えられていました。代わりに、Go は型と名前ベースの関数一致の一貫性を選択します。
Go にはオーバーロードされた関数がありませんが、その機能の一部をシミュレートする可変引数関数が用意されています。可変引数関数ではオプションの引数を使用でき、省略されたパラメータに対してデフォルト値が推測されます。ただし、この手法では型チェックが犠牲になります。
以上がGo は C のような関数のオーバーロードをサポートしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。