亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang 中的 make 和 initialize struct 有什么區別?

golang 中的 make 和 initialize struct 有什么區別?

Go
陪伴而非守候 2021-12-20 19:16:53
我們可以通過make函數創建通道,通過{}表達式創建新對象。ch := make(chan interface{})o := struct{}{}但是,新地圖make和{}新地圖有什么區別?m0 := make(map[int]int)m1 := map[int]int{}
查看完整描述

2 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

make可用于初始化具有預分配空間的映射。它需要一個可選的第二個參數。


m0 := make(map[int]int, 1000) // allocateds space for 1000 entries


分配需要 CPU 時間。如果您知道地圖中將有多少條目,您可以為所有條目預先分配空間。這減少了執行時間。這是您可以運行的程序來驗證這一點。


package main


import "fmt"

import "testing"


func BenchmarkWithMake(b *testing.B) {

    m0 := make(map[int]int, b.N)

    for i := 0; i < b.N; i++ {

        m0[i] = 1000

    }

}


func BenchmarkWithLitteral(b *testing.B) {

    m1 := map[int]int{}

    for i := 0; i < b.N; i++ {

        m1[i] = 1000

    }

}


func main() {

    bwm := testing.Benchmark(BenchmarkWithMake)

    fmt.Println(bwm) // gives 176 ns/op


    bwl := testing.Benchmark(BenchmarkWithLitteral)

    fmt.Println(bwl) // gives 259 ns/op

}


查看完整回答
反對 回復 2021-12-20
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

來自make關鍵字的文檔:

映射:根據大小進行初始分配,但結果映射的長度為 0。大小可以省略,在這種情況下,分配的起始大小較小。

因此,就地圖而言,使用make和使用空地圖文字沒有區別。


查看完整回答
反對 回復 2021-12-20
  • 2 回答
  • 0 關注
  • 200 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號