> 백엔드 개발 > Golang > Go에서 `func(interface{})`를 기대하는 함수에 `func(int)`를 전달할 수 없는 이유는 무엇입니까?

Go에서 `func(interface{})`를 기대하는 함수에 `func(int)`를 전달할 수 없는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-23 16:09:12
원래의
533명이 탐색했습니다.

Why Can't I Pass a `func(int)` to a Function Expecting `func(interface{})` in Go?

인터페이스 매개변수가 호환되지 않는 유형 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿