首頁 > 後端開發 > Golang > 與其他型別檢查方法相比,Go 的型別斷言和型別開關表現如何?

與其他型別檢查方法相比,Go 的型別斷言和型別開關表現如何?

DDD
發布: 2024-12-14 08:33:12
原創
816 人瀏覽過

How Do Go's Type Assertions and Type Switches Perform Compared to Other Type Checking Methods?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板