1 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
使用if _, ok := M1[k]; ok { }. 如果您使用空白標(biāo)識(shí)符,則不會(huì)“加載”該值。
讓我們編寫(xiě)基準(zhǔn)測(cè)試來(lái)測(cè)試它:
var m = map[int][1_000_000]int64{
1: {},
}
func BenchmarkNonBlank(b *testing.B) {
for i := 0; i < b.N; i++ {
if v, ok := m[1]; ok {
if false {
_ = v
}
}
}
}
func BenchmarkBlank(b *testing.B) {
for i := 0; i < b.N; i++ {
if _, ok := m[1]; ok {
if false {
_ = ok
}
}
}
}
運(yùn)行g(shù)o test -bench .,輸出為:
BenchmarkNonBlank-8 1497 763278 ns/op
BenchmarkBlank-8 97802791 12.09 ns/op
如您所見(jiàn),使用空白標(biāo)識(shí)符,該操作大約需要 10 ns。當(dāng)我們將值分配給非空白標(biāo)識(shí)符時(shí),當(dāng)值類(lèi)型的大小約為 8 MB 時(shí),它幾乎是 1 毫秒(幾乎慢了十萬(wàn)倍)。
- 1 回答
- 0 關(guān)注
- 132 瀏覽
添加回答
舉報(bào)