O idioma Go possui sobrecarga de função / método?

127

Estou portando uma biblioteca C para Go. A função CA (com varargs) é definida assim:

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

Então eu criei as funções do wrapper C:

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

Se eu definir a função em Go, desta forma:

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)))
}

O compilador Go reclama:

*Easy·SetOption redeclared in this block

O Go suporta sobrecarga de função (método) ou esse erro significa outra coisa?

Darius Kucinskas
fonte

Respostas:

165

Não, não tem.

Consulte as Perguntas frequentes sobre o idioma Go e, especificamente, a seção sobre sobrecarga .

O envio de métodos é simplificado se não for necessário fazer a correspondência de tipos também. A experiência com outros idiomas nos disse que ter uma variedade de métodos com o mesmo nome, mas com assinaturas diferentes, era ocasionalmente útil, mas também poderia ser confuso e frágil na prática. Combinar apenas pelo nome e exigir consistência nos tipos foi uma decisão importante e simplificadora no sistema de tipos da Go.

Atualização: 07-04-2016

Embora o Go ainda não tenha funções sobrecarregadas (e provavelmente nunca terá), o recurso mais útil da sobrecarga, o de chamar uma função com argumentos opcionais e inferir padrões para os omitidos, pode ser simulado usando uma função variada, que já foi adicionada. Mas isso ocorre com a perda de verificação de tipo.

Por exemplo: http://changelog.ca/log/2015/01/30/golang

Lawrence Dol
fonte
20

De acordo com isso, não existe: http://golang.org/doc/go_for_cpp_programmers.html

Na seção Diferenças conceituais , diz:

"O Go não suporta sobrecarga de funções e não suporta operadores definidos pelo usuário."

Merigrim
fonte