Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah Terdapat Perbezaan Prestasi Antara `make` dan `{}` untuk Permulaan Peta dalam Go?

Adakah Terdapat Perbezaan Prestasi Antara `make` dan `{}` untuk Permulaan Peta dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-01 05:08:27689semak imbas

Is There a Performance Difference Between `make` and `{}` for Map Initialization in Go?

Perbandingan Prestasi Kaedah Permulaan Peta dalam Go: make vs. {}

Dalam Go, peta boleh dimulakan menggunakan dua kaedah utama:

<code class="go">var myMap map[string]int
myMap = map[string]int{}</code>

vs.

<code class="go">myMap = make(map[string]int)</code>

Timbul persoalan sama ada terdapat sebarang perbezaan prestasi yang ketara antara pendekatan ini.

Penilaian Prestasi

Untuk menilai prestasi, ujian penanda aras telah dijalankan menggunakan pakej ujian tersuai. Keputusan merentasi berbilang larian menunjukkan perbezaan yang boleh diabaikan antara kedua-dua kaedah. Berikut ialah contoh kod penanda aras:

<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>

Keputusan Penanda Aras

Keputusan penanda aras untuk tiga larian berasingan adalah seperti berikut:

$ 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

Kesimpulan

Berdasarkan hasil penanda aras ini, tiada perbezaan prestasi yang ketara antara memulakan peta menggunakan map[string]int{} dan make(map[string] int). Kedua-dua kaedah mempamerkan prestasi yang hampir sama pada mesin sampel.

Atas ialah kandungan terperinci Adakah Terdapat Perbezaan Prestasi Antara `make` dan `{}` untuk Permulaan Peta dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn