Typzusicherungen und Typwechsel in Go: Überlegungen zur Leistung
In Go stellen Typzusicherungen und Typwechsel Mechanismen zur Typerkennung zur Laufzeit bereit. Es wurden jedoch Bedenken hinsichtlich ihrer Leistung im Vergleich zu Methoden wie Typelementvergleichen in C/C geäußert.
Um ihre Auswirkungen zu bewerten, wurde ein Benchmark-Test durchgeführt, um die Geschwindigkeit dieser Methoden zu vergleichen:
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...
Die Ergebnisse auf einer AMD R7 2700X-Maschine (Go v1.12.9) zeigen, dass alle Methoden eine ähnliche Leistung haben:
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
In Im Gegensatz zu früheren Ergebnissen aus dem Jahr 2015 auf einer amd64-Maschine ist bei der Verwendung von Typschaltern oder Zusicherungen im Vergleich zu direkten Methodenaufrufen oder Schnittstellenzugriffen keine signifikante Verlangsamung zu beobachten.
Insgesamt hat sich die Leistung von Typzusicherungen und -schaltern deutlich verbessert in Go und ist jetzt mit anderen Typprüfungsmethoden vergleichbar. Daher können Sie sie in Ihrem Code verwenden, ohne erhebliche Leistungseinbußen befürchten zu müssen.
Das obige ist der detaillierte Inhalt vonWie funktionieren die Typzusicherungen und Typwechsel von Go im Vergleich zu anderen Typprüfungsmethoden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!