大量資料如果沒有寫入,只是讀取不會出錯
var wg sync.waitgroup
m :=
make
(map
[int
]int
)for i :=
0; i <
10000
; i++
wg.add(
100000
)for i :=
0; i <
10; i++}(
)}wg.
wait()
//執行結果 無序
//...
//第10個go程 key:7410-value:7410
//第10個go程 key:2710-value:2710
//第10個go程 key:5388-value:5388
//第10個go程 key:9667-value:9667
//第10個go程 key:477-value:477
//第10個go程 key:579-value:579
//第10個go程 key:3405-value:3405
順帶乙個map引用傳遞的問題,其實傳值或者傳位址,都沒有發生拷貝
傳遞的其實是map的引用,沒有發生拷貝
var wg sync.waitgroup
m :=
make
(map
[int
]int
)for i :=
0; i <
3; i++
fmt.
printf
(,m)
wg.add(2)
for i :=
0; i <
2; i++
fmt.
printf
(, m, m1)
wg.done()
}(i,m)
} wg.
wait()
//第1個go程 key:0-value:0
//第1個go程 key:1-value:1
//第1個go程 key:2-value:2
//,map區域性變數位址0xc000071bc0
//第0個go程 key:0-value:0
//第0個go程 key:1-value:1
//第0個go程 key:2-value:2
//,map區域性變數位址0xc000071bc0
map引用傳遞var wg sync.waitgroup
m :=
make
(map
[int
]int
)for i :=
0; i <
3; i++
fmt.
printf
(,m)
wg.add(2)
for i :=
0; i <
2; i++
fmt.
printf
(, m,
*m1)
wg.done()
}(i,
&m)}
wg.wait()
//第1個go程 key:0-value:0
//第1個go程 key:1-value:1
//第1個go程 key:2-value:2
//,map區域性變數位址0xc000202b40
//第0個go程 key:0-value:0
//第0個go程 key:1-value:1
//第0個go程 key:2-value:2
//,map區域性變數位址0xc000202b40
這裡有個疑問,為什麼切片不用引用傳遞
var wg sync.waitgroup
s :=
make([
]int,3
)for i :=
0; i <
len(s)
; i++
fmt.
printf
(,s)
wg.add(2)
for i :=
0; i <
2; i++
fmt.
printf
("slice go程裡面位址%p\n"
, s)
wg.done()
}(i)
} wg.
wait()
//第1個go程 key:0-value:0
//第1個go程 key:1-value:1
//第1個go程 key:2-value:2
//slice go程裡面位址0xc000010860
//第0個go程 key:0-value:0
//第0個go程 key:1-value:1
//第0個go程 key:2-value:2
//slice go程裡面位址0xc000010860
var wg sync.waitgroup
s :=
make([
]int,3
)for i :=
0; i <
len(s)
; i++
fmt.
printf
(,s)
wg.add(2)
for i :=
0; i <
2; i++
fmt.
printf
(, s, s1)
wg.done()
}(i, s)
} wg.
wait()
//第1個go程 key:0-value:0
//第1個go程 key:1-value:1
//第1個go程 key:2-value:2
//,slice區域性變數位址0xc000208080
//第0個go程 key:0-value:0
//第0個go程 key:1-value:1
//第0個go程 key:2-value:2
//,slice區域性變數位址0xc000208080
var wg sync.waitgroup
s :=
make([
]int,3
)for i :=
0; i <
len(s)
; i++
fmt.
printf
(,s)
wg.add(2)
for i :=
0; i <
2; i++
fmt.
printf
(, s,
*s1)
wg.done()
}(i,
&s)}
wg.wait()
//第0個go程 key:0-value:0
//第0個go程 key:1-value:1
//第0個go程 key:2-value:2
//,slice區域性變數位址0xc00019a060
//第1個go程 key:0-value:0
//第1個go程 key:1-value:1
//第1個go程 key:2-value:2
//,slice區域性變數位址0xc00019a060
Golang map的底層實現
並修改 map是go語言中基礎的資料結構,在日常的使用中經常被用到。但是它底層是如何實現的呢?總體來說golang的map是hashmap,是使用陣列 鍊錶的形式實現的,使用拉鍊法消除hash衝突。golang的map由兩種重要的結構,hmap和bmap 下文中都有解釋 主要就是hmap中包含乙個指...
golang map轉json的順序問題
我們都知道map是無序的,每次取出key value的順序都可能不一致,但map轉json的順序是不是也是無序的嗎?儘管json中的引數順序大部分情況下對使用沒有影響,我們不妨看看原始碼中怎麼處理的。先說結論 map轉json是有序的,按照ascii碼公升序排列key。原始碼位於encoding j...
驗證性實驗
1 使用 ipconfig all 檢視自己計算機的網路配置 1 使用 tracert www.baidu.com 命令,檢視反饋的資訊,了解節點的個數。1 執行 arp a 命令檢視當前的 arp 快取 2 使用 arp 命令了解該命令的各種選項 3 假設當前閘道器的 ip 位址是 192.168...