>  기사  >  백엔드 개발  >  Go의 맵 초기화에서 `make`와 `{}` 사이에 성능 차이가 있나요?

Go의 맵 초기화에서 `make`와 `{}` 사이에 성능 차이가 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-11-01 05:08:27689검색

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

Go의 지도 초기화 방법 성능 비교: make와 {}

Go에서는 두 가지 기본 방법을 사용하여 지도를 초기화할 수 있습니다.

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

vs.

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

이러한 접근 방식 간에 눈에 띄는 성능 차이가 있는지 의문이 듭니다.

성능 평가

성능 평가를 위해 맞춤형 테스트 패키지를 사용해 벤치마크 테스트를 진행했습니다. 여러 번의 실행에 대한 결과는 두 방법 간의 차이가 미미한 것으로 나타났습니다. 다음은 샘플 벤치마크 코드입니다.

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

벤치마크 결과

세 번의 개별 실행에 대한 벤치마크 결과는 다음과 같습니다.

$ 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

결론

이러한 벤치마크 결과에 따르면 map[string]int{}와 make(map[string]을 사용하여 지도를 초기화하는 것 사이에는 큰 성능 차이가 없습니다. 정수). 두 방법 모두 샘플 기계에서 거의 동일한 성능을 나타냅니다.

위 내용은 Go의 맵 초기화에서 `make`와 `{}` 사이에 성능 차이가 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.