¿El lenguaje Go tiene sobrecarga de función / método?


127

Estoy portando una biblioteca C para ir. La función AC (con varargs) se define así:

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

Entonces creé las funciones del contenedor C:

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

Si defino la función en Ir así:

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

El compilador de Go se queja:

*Easy·SetOption redeclared in this block

Entonces, ¿Go admite la sobrecarga de la función (método), o este error significa algo más?

Respuestas:


165

No, no lo hace.

Consulte las Preguntas frecuentes sobre Go Language , y específicamente la sección sobre sobrecarga .

El envío de métodos se simplifica si no es necesario que también coincida con el tipo. La experiencia con otros idiomas nos dijo que tener una variedad de métodos con el mismo nombre pero con firmas diferentes ocasionalmente era útil, pero que también podría ser confuso y frágil en la práctica. Hacer coincidir solo por nombre y requerir consistencia en los tipos fue una decisión importante de simplificación en el sistema de tipos de Go.

Actualizar: 2016-04-07

Si bien Go todavía no tiene funciones sobrecargadas (y probablemente nunca las tendrá), la característica más útil de sobrecargar, la de llamar a una función con argumentos opcionales e inferir valores predeterminados para aquellos omitidos, se puede simular usando una función variada, que desde entonces se ha agregado. Pero esto llega a la pérdida de la verificación de tipo.

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



Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.