>  기사  >  백엔드 개발  >  변환 시 유형 제약 조건이 있는 Go 인터페이스를 사용할 수 없는 이유는 무엇입니까?

변환 시 유형 제약 조건이 있는 Go 인터페이스를 사용할 수 없는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-07 03:36:03249검색

Why Can't I Use a Go Interface with Type Constraints in a Conversion?

Go 인터페이스의 유형 제약 이해

Go 인터페이스는 데이터 유형을 추상화하고 코드 재사용을 촉진하는 강력한 도구입니다. 그러나 인터페이스 사용은 특정 규칙에 의해 제한되며, 그 중 하나는 유형 요소를 포함하는 인터페이스를 금지하는 것입니다.

주어진 코드 조각에서 "인터페이스에 유형 제약 조건이 포함되어 있습니다. 변환 시 인터페이스 번호를 사용할 수 없습니다."라는 오류가 발생합니다. "는 이러한 제한으로 인해 발생합니다. Number 인터페이스는 Number 인터페이스 { int | int64 | float64 }는 세 가지 특정 유형의 통합을 정의합니다. 이로 인해 Number는 기본이 아닌 인터페이스가 됩니다. 즉, 값이나 변수의 유형으로 사용할 수 없습니다.

언어 사양에서는 유형 변환에서 기본이 아닌 인터페이스를 사용하거나 다른 유형의 요소로 사용하는 것을 허용하지 않습니다. Number를 사용하여 새로운 값을 구성할 수 없기 때문에 a 변수를 []Number{Number(1), Number(2), Number(3), Number(4)}로 초기화할 수 없습니다.

극복하려면 이러한 제한으로 인해 모든 유형의 값을 보유할 수 있는 인터페이스{} 유형을 사용할 수 있습니다. aa 변수는 요소가 Number의 유형 제약 조건에 의해 제한되지 않기 때문에 []interface{}{interface{}(1), 인터페이스{}(2), 인터페이스{}(3), 4}로 성공적으로 생성되었습니다.

또는 NNumber와 같은 유형 제약 없이 인터페이스를 정의하고 이를 사용하여 유형이 안전한 슬라이스를 생성할 수 있습니다. NNumber에는 유형 제한이 없으므로 aaa 변수는 []NNumber{NNumber(1), NNumber(2), NNumber(3), 4}로 오류 없이 초기화됩니다.

기본 및 기본이 아닌 인터페이스와 이를 둘러싼 제한 사항을 고려하여 유형 제약과 관련된 잠재적인 문제를 피하면서 Go 인터페이스를 효과적으로 활용할 수 있습니다.

위 내용은 변환 시 유형 제약 조건이 있는 Go 인터페이스를 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.