Go 1.20에서 컴파일 타임에 엄격한 비교 가능성을 보장합니까?

王林
풀어 주다: 2024-02-11 23:20:08
앞으로
1042명이 탐색했습니다.

确保 Go 1.20 中编译时的严格可比性?

php 편집기 Baicao는 Go 언어 버전 1.20의 중요한 기능, 즉 컴파일 시 엄격한 비교 기능을 소개합니다. Go 언어 버전 1.20에는 컴파일 중에 생성된 바이너리 파일을 다양한 컴파일 환경에서 비교할 수 있도록 새로운 컴파일러 플래그가 도입되었습니다. 즉, 서로 다른 컴파일 환경에서 생성된 바이너리는 동일한 동작과 결과를 가지므로 서로 다른 컴파일 환경으로 인해 발생할 수 있는 문제가 줄어듭니다. 이 기능의 도입으로 Go 언어의 신뢰성과 안정성이 더욱 향상되고 개발자에게 더 나은 개발 경험이 제공될 것입니다.

질문 내용

Go 1.18과 Go 1.19에서는 컴파일 타임에 유형이 엄격하게 비교 가능하다는 것을 보장할 수 있습니다. 즉, ==!= 연산자를 지원하고 이러한 연산자 가 실행될 때 당황하지 않고 실행이 보장됩니다.

예를 들어 실수로 구조에 필드를 추가하여 불필요한 패닉을 일으키는 것을 방지하는 데 유용합니다.

방금 comparable :

로 인스턴스화하려고 했습니다. 으아악

이는 comparable 제약 조건의 정의로 인해 Go 1.18 및 1.19에서 가능합니다.

으아악

Go 1.18 및 1.19 사양에서는 [2]fmt.Stringer 또는 struct { foo any }와 같이 인터페이스가 아니지만 엄격하게 비교할 수 없는 유형을 언급하지 않지만 , gc 컴파일 컴파일러는 이를 [2]fmt.Stringerstruct { foo any },gc 编译器确实拒绝将这些作为 comparable에 대한 인수로 거부합니다.

몇 가지 예시가 있는 놀이터: https://go.dev/play/p/_Ggfdnn6OzZ

Go 1.20에서는 인스턴스화 comparable 将与更广泛的可比性概念保持一致。这使得 ensureComparable[Foo]가 더 넓은 비교 가능성 개념과 일치하게 됩니다. 이렇게 하면 내가 원하지 않는데도 ensureComparable[Foo]가 컴파일 됩니다.

Go 1.20과의 엄격한 비교성을 정적으로 보장할 수 있는 방법이 있나요?

해결 방법

Go 1.20에서 Foo가 엄격하게 비교 가능한지 테스트하려면 Foo>로 제한되는 Foo 在 Go 1.20 中是否严格可比,请使用受 Foo 约束的类型参数实例化 ensureComparabletype 매개변수

를 사용하여 ensureComparable를 인스턴스화하세요.

으아악 이 솔루션은 원래 a> Robert Griesemer가 제안한 것이었습니다 .

그럼 어떻게 작동하나요?

Go 1.20에는 구현인터페이스가 도입되었으며 충족 제약조건

:

comparable두 번째 요점은 인터페이스가 있는 인터페이스 및 유형의 인스턴스화에 대한 예외를 허용하는 것입니다.

.

Foo 本身可以实例化 comparable 。但类型参数 T 不是 Foo이제 Go 1.20에서는 만족 예외로 인해 Foo 유형 자체를 인스턴스화할 수 있습니다 . 그러나 유형 매개변수 TFoo가 아닙니다. 유형 매개변수 에 대한 호환성 정의는 다릅니다

:

T 的类型集包含一个不严格可比的类型 Foo (因为它有一个接口字段),因此 T 不满足 comparable。即使 FooT의 유형 집합에는 (인터페이스 필드가 있기 때문에) 엄밀히 비교할 수 없는 Foo 유형이 포함되어 있으므로 T는 만족하지 않습니다.

. 이는 Foo 자체에도 해당됩니다.

Foo 的运算符 ==!=이 트릭을 사용하면 Foo의 연산자

가 런타임 시 패닉이 발생할 경우 프로그램이 컴파일되지 않게 됩니다. 🎜

위 내용은 Go 1.20에서 컴파일 타임에 엄격한 비교 가능성을 보장합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!