用表達能做make
功能,新的對象能做渠道。golang中make和initialize結構有什麼區別?
ch := make(chan interface{})
o := struct{}{}
但是,有什麼新的地圖make
和{}
之間的區別?
m0 := make(map[int]int)
m1 := map[int]int{}
用表達能做make
功能,新的對象能做渠道。golang中make和initialize結構有什麼區別?
ch := make(chan interface{})
o := struct{}{}
但是,有什麼新的地圖make
和{}
之間的區別?
m0 := make(map[int]int)
m1 := map[int]int{}
從文檔的關鍵字make
:
地圖:一個初始分配是根據尺寸製成但 生成的地圖具有長度爲0,可以省略尺寸,在這種情況下一個 小的起始大小被分配。
因此,在地圖的情況下,使用make
和使用空映射文字沒有區別。
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
}
沒有區別 – kostya