Go의 유형 어설션 및 유형 스위치: 성능 고려 사항
Go에서 유형 어설션 및 유형 스위치는 런타임 유형 검색 메커니즘을 제공합니다. 그러나 C/C의 유형 멤버 비교와 같은 방법에 비해 성능에 대한 우려가 제기되었습니다.
그 영향을 평가하기 위해 벤치마크 테스트를 수행하여 이러한 방법의 속도를 비교했습니다.
package main import ( "testing" ) type myint int64 type Inccer interface { inc() } func (i *myint) inc() { *i = *i + 1 } func BenchmarkIntmethod(b *testing.B) { i := new(myint) incnIntmethod(i, b.N) } func BenchmarkInterface(b *testing.B) { i := new(myint) incnInterface(i, b.N) } func BenchmarkTypeSwitch(b *testing.B) { i := new(myint) incnSwitch(i, b.N) } func BenchmarkTypeAssertion(b *testing.B) { i := new(myint) incnAssertion(i, b.N) } // Remaining helper functions...
AMD R7 2700X 시스템(Go v1.12.9)의 결과는 모든 방법이 유사하다는 것을 보여줍니다. 성능:
BenchmarkIntmethod-16 2000000000 1.67 ns/op BenchmarkInterface-16 1000000000 2.03 ns/op BenchmarkTypeSwitch-16 2000000000 1.70 ns/op BenchmarkTypeAssertion-16 2000000000 1.67 ns/op
amd64 시스템의 2015년 이전 결과와 달리 유형 스위치나 어설션을 사용할 때 직접 메서드 호출이나 인터페이스 액세스에 비해 눈에 띄는 속도 저하가 관찰되지 않았습니다.
전반적으로 유형 어설션 및 전환의 성능은 Go에서 크게 향상되었으며 이제 다른 유형 확인 방법과 비교할 수 있습니다. 따라서 상당한 성능 저하에 대한 걱정 없이 코드에서 이를 활용할 수 있습니다.
위 내용은 Go의 유형 어설션 및 유형 전환은 다른 유형 검사 방법과 비교하여 어떻게 수행됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!