„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Leistungsvergleich von GO -Typbehauptungen und Typenschalter mit anderen Typ -Check -Methoden

Leistungsvergleich von GO -Typbehauptungen und Typenschalter mit anderen Typ -Check -Methoden

Gepostet am 2025-04-19
Durchsuche:283

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

Geben Sie die Aufführung ein und wechseln Sie die Leistung in go

in Programmiersprachen und feststellen, dass die Art eines Variablen oder Objekts während der Laufzeit eine grundlegende Operation ist. GO verwendet Typbehauptungen und Typschalter, um diesen Prozess zu erleichtern. Dieser Artikel befasst sich mit den Leistungsmerkmalen dieser Techniken.

Performance Bedenken

In einigen Sprachen wie C/C können die Entdeckung von Laufzeit -Typen Leistungsstrafen entstehen. GO -Programmierer haben darüber nachgedacht, ob Typbehandlungen oder Typ -Switches ähnliche Ineffizienzen aufweisen. Um dies anzusprechen, führen wir einen umfassenden Benchmark aus:

package main

import (
    "fmt"
    "testing"
)

func question(anything interface{}) {
    switch v := anything.(type) {
        case string:
            fmt.Println(v)
        case int32, int64:
            fmt.Println(v)
        case SomeCustomType:
            fmt.Println(v)
        default:
            fmt.Println("unknown")
    }
}

Der Beispielcode verwendet einen Typ -Switch, um die Art der Eingabevariablen zu bestimmen. importieren ( "Testen" ) Geben Sie MyInt int64 ein Geben Sie die Inccer -Schnittstelle {ein Inc () } func (i *myint) inc () { *i = *i 1 } Func BenchmarkintMethod (B *testing.b) { i: = neu (myint) IncnintMethod (i, B.N) } Func Benchmarkinterface (B *testing.b) { i: = neu (myint) Incninterface (i, B.N) } Func BenchmarkTypeSwitch (B *testing.b) { i: = neu (myint) INCNSWITCH (I, B.N.) } Func BenchmarkTypeasStion (B *testing.b) { i: = neu (myint) Incnassertion (I, B.N.) } func IncnintMethod (i *myint, n int) { für k: = 0; k

Bei mehreren Testmaschinen zeigen die Ergebnisse konsistent, dass alle vier Methoden mit ähnlichen Geschwindigkeiten durchführen: Direktmethodenaufrufe, Schnittstellenimplementierungen, Typ Behauptungen und Typ -Switches. Das folgende Beispiel zeigt folgende Ergebnisse: 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

Daher sind unsere Schlussfolgerung, dass Typen und Typsschalter in Go keine merklichen Leistungsstörungen im Vergleich zu anderen Typ-Checking-Methoden entstehen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3