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.Stringer
或 struct { 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
约束的类型参数实例化 ensureComparable
type 매개변수
ensureComparable
를 인스턴스화하세요. 으아악 이 솔루션은 원래 a> Robert Griesemer가 제안한 것이었습니다 .
그럼 어떻게 작동하나요?
Go 1.20에는 구현인터페이스가 도입되었으며 충족 제약조건
:
comparable
두 번째 요점은 인터페이스가 있는 인터페이스 및 유형의 인스턴스화에 대한 예외를 허용하는 것입니다.
Foo
本身可以实例化 comparable
。但类型参数 T
不是 Foo
이제 Go 1.20에서는 만족 예외로 인해 Foo
유형 자체를 인스턴스화할 수 있습니다 . 그러나 유형 매개변수 T
는 Foo
가 아닙니다. 유형 매개변수 에 대한 호환성 정의는 다릅니다
T
的类型集包含一个不严格可比的类型 Foo
(因为它有一个接口字段),因此 T
不满足 comparable
。即使 Foo
T
의 유형 집합에는 (인터페이스 필드가 있기 때문에) 엄밀히 비교할 수 없는 Foo
유형이 포함되어 있으므로 T
는 만족하지 않습니다.
Foo
자체에도 해당됩니다.
Foo
的运算符 ==
和 !=
이 트릭을 사용하면 Foo
의 연산자
위 내용은 Go 1.20에서 컴파일 타임에 엄격한 비교 가능성을 보장합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!