Есть ли в языке Go перегрузка функций /методов?

Я портирую библиотеку C на Go. Функция C (с переменными) определяется следующим образом:

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
81 голос | спросил Darius Kucinskas 8 PM000000100000004831 2011, 22:42:48

3 ответа


0

Нет, это не так.

См. Часто задаваемые вопросы по языку Go , и, в частности, раздел перегрузка .

  

Диспетчеризация методов упрощается, если не требуется выполнять сопоставление типов. Опыт работы с другими языками показал нам, что наличие различных методов с одинаковыми именами, но разными сигнатурами иногда полезно, но на практике это также может быть запутанным и хрупким. Совпадение только по имени и требование согласованности типов было основным упрощающим решением в системе типов Go.

     

Что касается перегрузки операторов, то это скорее удобство, чем абсолютное требование. Опять же, все проще без него.

Обновление: 2016-04-07

Хотя Go по-прежнему не имеет перегруженных функций (и, вероятно, никогда не будет), наиболее полезная функция перегрузки, которая заключается в вызове функции с необязательными аргументами и выводе значений по умолчанию для пропущенных, может быть смоделирована с помощью функции с переменным числом аргументов, которая с тех пор были добавлены Но это происходит при потере проверки типов.

Например: http://changelog.ca/log/2015/01/30 /golang

ответил Lawrence Dol 8 PM000000100000002831 2011, 22:47:28
0

В соответствии с этим, это не так: http://golang.org/doc/go_for_cpp_programmers.html

В разделе Концептуальные различия говорится:

"Go не поддерживает перегрузку функций и не поддерживает определяемые пользователем операторы."

ответил Merigrim 8 PM000000100000000131 2011, 22:48:01
0

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

Процесс преобразует параметры в этот пустой interface{}.

Первый тип преобразования, а затем внутренние логические процессы.

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

ответил Yon Joon Moon 27 Jam1000000amTue, 27 Jan 2015 09:29:30 +030015 2015, 09:29:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132