인터페이스 매개변수가 호환되지 않는 유형 func: 분산 이해
Go에서 "cannot use a (type func(int)) as"가 발생합니다. 인터페이스 매개변수를 사용하여 함수를 호출할 때 b" 오류에 대한 인수에 myfunc를 입력하면 당황스러울 수 있습니다. 이 문제는 유형 시스템의 가변성 개념으로 인해 발생합니다.
Go의 인터페이스는 가변성을 나타내지 않습니다. 즉, 인터페이스는 다른 프로그래밍 언어처럼 공변적으로 동작하지 않습니다. 유형 x가 인터페이스 ii를 구현한다고 해서 func(x)가 func(ii)를 구현한다는 의미는 아닙니다.
제공된 예에서는 func(int)가 func(interface{ }) int가 인터페이스에 할당 가능함에도 불구하고{}. 이러한 비호환성은 인터페이스가 Go에서 공변적으로 동작하지 않는다는 사실에서 발생합니다.
이 문제를 해결하려면 다음 예에서 설명한 것처럼 인터페이스{}를 기대하는 함수에 func(int)를 전달할 수 있습니다.
package main import "fmt" func foo(x interface{}) { fmt.Println("foo", x) } func add2(n int) int { return n + 2 } func main() { foo(add2) }
이는 func(int)int가 인터페이스{}를 구현하여 유형을 더 일반적인 인터페이스로 효과적으로 "확장"하기 때문에 작동합니다. type.
자세한 내용은 가변성에 대해 제공된 Wikipedia 기사와 다양한 프로그래밍 언어, 특히 상속을 지원하는 언어의 가변성을 탐구하는 링크된 블로그 게시물을 참조하세요.
위 내용은 Go에서 `func(interface{})`를 기대하는 함수에 `func(int)`를 전달할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!