[解決済み] Go言語には関数/メソッドのオーバーロードがありますか?
2022-04-25 17:30:38
質問
C言語のライブラリをGoに移植しています。Cの関数(varargs付き)は次のように定義されています。
curl_easy_setopt(CURL *curl, CURLoption option, ...);
そこで、C言語のラッパー関数を作りました。
curl_wrapper_easy_setopt_str(CURL *curl, CURLoption option, char* param);
curl_wrapper_easy_setopt_long(CURL *curl, CURLoption option, long param);
Goでこんな風に関数を定義すると。
func (e *Easy)SetOption(option Option, param string) {
e.code = Code(C.curl_wrapper_easy_setopt_str(e.curl, C.CURLoption(option), C.CString(param)))
}
func (e *Easy)SetOption(option Option, param long) {
e.code = Code(C.curl_wrapper_easy_setopt_long(e.curl, C.CURLoption(option), C.long(param)))
}
Goコンパイラが文句を言う。
*Easy·SetOption redeclared in this block
では、Goは関数(メソッド)のオーバーロードをサポートしているのでしょうか、それともこのエラーは何か別の意味があるのでしょうか?
どうすればいい?
いいえ、そうではありません。
をご覧ください。 Go言語FAQ のセクションをご覧ください。 オーバーロード .
メソッドディスパッチは、タイプマッチングも必要なければ、簡素化される。他の言語での経験から、同じ名前で異なるシグネチャを持つ様々なメソッドを持つことは、時には便利ですが、実際には混乱しやすく壊れやすいということがわかりました。名前だけでマッチングし、型に一貫性を持たせることは、Goの型システムにおける主要な単純化の決定でした。
更新日:2016-04-07
Go にはまだオーバーロードされた関数がありませんが(おそらく今後もないでしょう)、オーバーロードの最も便利な機能である、オプションの引数で関数を呼び出し、省略された引数のデフォルトを推測するという機能は、その後追加された variadic 関数を使用してシミュレートすることができます。しかし、これは型チェックを失うことになる。
関連
-
[解決済み] go run: 非メインパッケージは実行できません
-
[解決済み] ParseFormはいつ使うべきで、FormValueとPostFormValueはいつ使うべきですか?
-
[解決済み] GoのHTTP基本認証
-
[解決済み] go言語でUUIDを生成する方法はありますか?
-
[解決済み] GoにはPythonのような "if x in "の構成がありますか?
-
[解決済み] "宣言されているが使用されていない "という迷惑なエラーを回避する方法
-
[解決済み】init()関数はいつ実行されるのですか?
-
[解決済み】XがYを実装していない(...メソッドがポインタのレシーバを持つ)
-
[解決済み】Goはサードパーティ・パッケージをどのようにアップデートしますか?
-
[解決済み] Go言語でのテストに適したパッケージの命名法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン