Go로 C 라이브러리를 이식하고 있습니다. 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 Language FAQ , 특히 오버로딩 섹션을 참조하십시오 .
유형 일치도 수행 할 필요가 없으면 메서드 디스패치가 단순화됩니다. 다른 언어에 대한 경험에 따르면 이름은 같지만 서명이 다른 다양한 방법을 사용하는 것이 때때로 유용하지만 실제로는 혼란스럽고 깨지기 쉽습니다. 이름으로 만 일치하고 유형의 일관성을 요구하는 것은 Go의 유형 시스템에서 주요 단순화 결정이었습니다.
업데이트 : 2016-04-07
Go에는 여전히 오버로드 된 함수가 없지만 (아마도 없을 것입니다) 오버로딩의 가장 유용한 기능인 선택적 인수를 사용하여 함수를 호출하고 생략 된 항목에 대한 기본값을 추론하는 기능은 이후 추가 된 가변 함수를 사용하여 시뮬레이션 할 수 있습니다. 그러나 이것은 유형 검사의 손실로 발생합니다.
예 : http://changelog.ca/log/2015/01/30/golang
답변
이것에 따르면 http://golang.org/doc/go_for_cpp_programmers.html
에서 개념 차이점 절은 말합니다 :
“Go는 함수 오버로딩을 지원하지 않으며 사용자 정의 연산자를 지원하지 않습니다.”
답변
func (e *Easy)SetOption(any []interface{})
이 프로세스는 매개 변수를이 빈 값으로 변환합니다 interface{}
.
첫 번째 유형의 변환은 내부 논리 처리입니다.
http://zerousm99.blogspot.kr/2015/01/golang-overload.html