Gibt es ein Äquivalent von Memset in Go?
In C ermöglicht die Memset-Funktion die effiziente Initialisierung von Arrays mit bestimmten Werten. In Go gibt es zwar kein direktes Äquivalent, aber mehrere Techniken können ähnliche Ergebnisse erzielen.
Schleifeniteration
Der einfachste Ansatz besteht darin, eine Schleife zu verwenden, um jedes Element festzulegen ein Array auf den gewünschten Wert.
func memsetLoop(a []int, v int) { for i := range a { a[i] = v } }
Wiederholt copy()
Durch die Nutzung der hochoptimierten Funktion copy() können wir ein wiederholtes Kopiermuster nutzen, um Array-Werte effizient festzulegen.
func memsetRepeat(a []int, v int) { if len(a) == 0 { return } a[0] = v for bp := 1; bp < len(a); bp *= 2 { copy(a[bp:], a[:bp]) } }
Benchmark-Ergebnisse
Um die Leistung dieser Techniken zu bewerten, vergleichen wir sie für verschiedene Arrays miteinander Größen.
var a = make([]int, 1000) // Size will vary func BenchmarkLoop(b *testing.B) { for i := 0; i < b.N; i++ { memsetLoop(a, 10) } } func BenchmarkRepeat(b *testing.B) { for i := 0; i < b.N; i++ { memsetRepeat(a, 11) } }
Die Ergebnisse zeigen, dass memsetRepeat() memsetLoop() für größere Arrays übertrifft und seine Effizienz für eine schnelle Initialisierung demonstriert.
Das obige ist der detaillierte Inhalt vonWie kann ich Arrays in Go effizient initialisieren, ähnlich wie beim Memset von C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!