Go语言有函数/方法重载吗?

新手上路,请多包涵

我正在将 C 库移植到 Go。 AC 函数(带有可变参数)定义如下:

 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是支持函数(方法)重载,还是这个错误有别的意思?

原文由 Darius Kucinskas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

不,不是的。

请参阅 Go 语言常见问题解答,特别是有关 重载 的部分。

如果方法分派也不需要进行类型匹配,则它会得到简化。使用其他语言的经验告诉我们,具有相同名称但不同签名的各种方法偶尔有用,但在实践中也可能令人困惑和脆弱。仅按名称匹配并要求类型一致是 Go 类型系统中的一个主要简化决策。

更新:2016-04-07

虽然 Go 仍然没有重载函数(并且可能永远不会),但重载最有用的特性,即使用可选参数调用函数并为省略的参数推断默认值可以使用可变参数函数来模拟,该函数已被添加。但这是在类型检查丢失的情况下发生的。

例如: http ://changelog.ca/log/2015/01/30/golang

原文由 Lawrence Dol 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏