Le langage Go a-t-il une surcharge de fonction / méthode?


127

Je porte une bibliothèque C sur Go. La fonction AC (avec varargs) est définie comme ceci:

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

J'ai donc créé des fonctions wrapper C:

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

Si je définis la fonction dans Go comme ceci:

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

Le compilateur Go se plaint:

*Easy·SetOption redeclared in this block

Est-ce que Go prend en charge la surcharge des fonctions (méthodes) ou cette erreur signifie-t-elle autre chose?

Réponses:


165

Non.

Consultez la FAQ de Go Language , et plus particulièrement la section sur la surcharge .

La répartition des méthodes est simplifiée si elle ne nécessite pas non plus de correspondance de type. L'expérience avec d'autres langues nous a montré qu'avoir une variété de méthodes avec le même nom mais avec des signatures différentes était parfois utile mais que cela pouvait aussi être déroutant et fragile dans la pratique. Faire correspondre uniquement par nom et exiger la cohérence dans les types était une décision de simplification majeure dans le système de type de Go.

Mise à jour: 07/04/2016

Bien que Go n'ait toujours pas de fonctions surchargées (et ne le sera probablement jamais), la fonctionnalité la plus utile de la surcharge, celle d'appeler une fonction avec des arguments optionnels et de déduire des valeurs par défaut pour celles omises, peut être simulée à l'aide d'une fonction variadique, qui a depuis été ajoutée. Mais cela vient à la perte de la vérification de type.

Par exemple: http://changelog.ca/log/2015/01/30/golang



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.