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

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

curl_easy_setopt(CURL *curl, CURLoption option, ...); 

所以我创build了包装C函数:

 curl_wrapper_easy_setopt_str(CURL *curl, CURLoption option, char* param); curl_wrapper_easy_setopt_long(CURL *curl, CURLoption option, long param); 

如果我这样定义Go的function:

 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语言常见问题解答 ,特别是有关重载的部分。

如果不需要进行types匹配,方法调度也会简化。 对其他语言的使用经验告诉我们,使用同一名称但签名不同的多种方法偶尔有用,但在实践中也可能令人困惑和脆弱。 只与名称匹配并要求types一致性是Gotypes系统中一个重要的简化决策。

对于运营商超载,似乎比绝对要求更方便。 没有它,事情就更简单了。

更新:2016-04-07

尽pipeGo仍然没有重载函数(可能永远也不会),但是使用可变参数函数(已经被添加)可以模拟重载的最有用的特性,即调用具有可选参数的函数并推断缺省值的函数。 但这是在types检查的损失。

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

据此,它不: http : //golang.org/doc/go_for_cpp_programmers.html

概念差异部分,它说:

“Go不支持函数重载,不支持用户定义的操作符”。

func (e *Easy)SetOption(any []interface{})

该过程将参数转换为这个空interface{}

第一类转换,然后是内部逻辑处理。

http://zerousm99.blogspot.kr/2015/01/golang-overload.html