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
與2015 年在amd64機器上的結果相比,與直接方法呼叫或介面存取相比,使用類型開關或斷言時沒有觀察到明顯的速度下降。
整體而言,Go 中類型斷言和切換的效能已顯著提高,現在可與其他類型檢查方法相媲美。因此,您可以在程式碼中使用它們,而不必擔心嚴重的效能損失。
以上是與其他型別檢查方法相比,Go 的型別斷言和型別開關表現如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!