Maison  >  Article  >  développement back-end  >  Existe-t-il une différence de performances entre « make » et « {} » pour l'initialisation de la carte dans Go ?

Existe-t-il une différence de performances entre « make » et « {} » pour l'initialisation de la carte dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 05:08:27689parcourir

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

Comparaison des performances des méthodes d'initialisation de carte dans Go : make vs. {}

Dans Go, les cartes peuvent être initialisées à l'aide de deux méthodes principales :

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

vs.

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

La question se pose de savoir s'il existe une différence de performance notable entre ces approches.

Évaluation des performances

Pour évaluer les performances, un test de référence a été effectué à l'aide d'un package de tests personnalisé. Les résultats sur plusieurs essais ont indiqué des différences négligeables entre les deux méthodes. Voici un exemple de code de référence :

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

Résultats de référence

Les résultats de référence pour trois exécutions distinctes étaient les suivants :

$ 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

Conclusion

Sur la base de ces résultats de référence, il n'y a pas de différence de performances significative entre l'initialisation de cartes à l'aide de map[string]int{} et make(map[string] int). Les deux méthodes présentent des performances presque identiques sur un exemple de machine.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn