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

我正在将C库移植到Go。AC函数(带有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语言常见问题解答,尤其是有关重载的部分。

如果方法调度也不需要进行类型匹配,则可以简化该方法。其他语言的经验告诉我们,使用具有相同名称但签名不同的多种方法有时会很有用,但在实践中也可能会造成混淆和脆弱。在Go的类型系统中,仅按名称进行匹配并要求类型一致是简化的主要决定。

更新时间:2016-04-07

尽管Go仍然没有重载函数(并且可能永远不会重载),但是重载最有用的功能(使用可选参数调用函数并为被省略的参数推断默认值)可以使用可变参数函数进行仿真,此函数现已添加。但这带来了类型检查的损失。

例如:http :

//changelog.ca/log/2015/01/30/golang

以上是 Go语言是否具有函数/方法重载? 的全部内容, 来源链接: utcz.com/qa/410815.html

回到顶部