Heim >Backend-Entwicklung >Golang >Gibt es einen Leistungsunterschied zwischen „make' und „{}' beim Initialisieren von Karten in Go?

Gibt es einen Leistungsunterschied zwischen „make' und „{}' beim Initialisieren von Karten in Go?

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 01:11:02814Durchsuche

 Is There a Performance Difference Between

In Go wird die Leistungslücke zwischen Maps aufgedeckt, die mit „make“ vs. „{}“ initialisiert wurden.

In Go haben Entwickler die Flexibilität um Karten auf zwei Arten zu initialisieren: „make“ und „{} Syntax. Dies wirft natürlich die Frage auf, ob es irgendwelche Leistungsunterschiede zwischen diesen gibt Ansätze.

Um die Leistung zu vergleichen, kann ein Benchmark-Test erstellt werden, um die Zeit zu messen, die zum Initialisieren einer Karte mit beiden Methoden benötigt wird. Der bereitgestellte Benchmark-Test, wie unten gezeigt, veranschaulicht dies:

<code class="go">package bench

import "testing"

var result map[string]int

func BenchmarkMakeLiteral(b *testing.B) {
    var m map[string]int
    for n := 0; n < b.N; n++ {
        m = InitMapLiteral()
    }
    result = m
}

func BenchmarkMakeMake(b *testing.B) {
    var m map[string]int
    for n := 0; n < b.N; n++ {
        m = InitMapMake()
    }
    result = m
}

func InitMapLiteral() map[string]int {
    return map[string]int{}
}

func InitMapMake() map[string]int {
    return make(map[string]int)
}</code>

Das mehrmalige Ausführen dieses Benchmarks führt zu Ergebnissen, die darauf hindeuten, dass sie hinsichtlich der Leistung praktisch gleichwertig sind:

$ go test -bench=.
testing: warning: no tests to run
PASS
BenchmarkMakeLiteral-8  10000000               160 ns/op
BenchmarkMakeMake-8     10000000               171 ns/op
ok      github.com/johnweldon/bench     3.664s

$ go test -bench=.
testing: warning: no tests to run
PASS
BenchmarkMakeLiteral-8  10000000               182 ns/op
BenchmarkMakeMake-8     10000000               173 ns/op
ok      github.com/johnweldon/bench     3.945s

$ go test -bench=.
testing: warning: no tests to run
PASS
BenchmarkMakeLiteral-8  10000000               170 ns/op
BenchmarkMakeMake-8     10000000               170 ns/op
ok      github.com/johnweldon/bench     3.751s

Dies zeigt an, dass im Durchschnitt der Leistungsunterschied zwischen den Initialisierungen besteht Karten mit der Syntax „make“ vs. „{} sind vernachlässigbar und können als im Wesentlichen gleichwertig angesehen werden.

Das obige ist der detaillierte Inhalt vonGibt es einen Leistungsunterschied zwischen „make' und „{}' beim Initialisieren von Karten in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn