記一次坑爹的golang 二維map判斷問題
現象
貼程式碼:
var PeopleLimit =make(map[string]map[string]int64)
func foo(arr1,arr2 string){
if x,ok := PeopleLimit[arr1][arr2];ok{
fmt.Println(" ok")
fmt.Println(x)
}else{
PeopleLimit[arr1] = make(map[string]int64)
fmt.Println(" not ok")
}
//新增新元素
PeopleLimit[arr1][arr2] = time.Now().Unix()
}
func main() {
foo("a","b")
foo("c","d")
foo("a","f")
fmt.Println(PeopleLimit)
return
}
按理應該要輸出三個元素,但第一個被覆蓋了,定位了很久才發現是二維map的判斷問題:
執行foo("a","f")
時
if x,ok := PeopleLimit[arr1][arr2];
判斷是二級key也不存在,但在執行第三次foo("a","f")
時,map[a][b]
是存在,但map[a][f]
不存在,於是,進入else後重新make
將map[a]
清空了!!
修改後:
var PeopleLimit =make(map[string]map[string]int64)
func foo(arr1,arr2 string){
if x,ok := PeopleLimit[arr1];ok{
//修改點
if y,ok := x[arr2];ok{
fmt.Println(" ok")
fmt.Println(x,y)
}
}else{
PeopleLimit[arr1] = make(map[string]int64)
fmt.Println(" not ok")
}
//新增新元素
PeopleLimit[arr1][arr2] = time.Now().Unix()
}
func main() {
foo("a","b")
foo("c","d")
foo("a","f")
fmt.Println(PeopleLimit)
return
}
相關文章
- golang map的判斷,刪除Golang
- NDK的坑爹問題make: *** No rule to make target
- 踩坑CBO,解決那些坑爹的SQL優化問題SQL優化
- golang 多維mapGolang
- 一次網路問題的診斷(二)
- 開發:隨筆記錄之 判斷list和map相等,併合並等問題筆記
- 坑爹的IE6相容性問題
- Golang判斷url字首Golang
- Elasticsearch 的坑爹事——記錄一次mapping field修改過程ElasticsearchAPP
- 坑爹的Sun JDKJDK
- 踩了 Golang sync.Map 的一個坑Golang
- 坑爹的驗證碼。。
- 坑爹的Oracle 11.2.0.3Oracle
- 坑爹的IE8
- golang判斷檔案是否存在Golang
- 坑爹的Python陷阱(避坑指南)Python
- Golang 學習——如何判斷 Golang 介面是否實現?Golang
- 記一次關於js陣列型別判斷及js型別判斷的細節探索JS陣列型別
- MySQL中case?when對NULL值判斷的踩坑記錄RTGYMySqlNull
- 記一次使用gdb診斷gc問題全過程GC
- .記一次使用gdb診斷gc問題全過程GC
- 一次gc buffer busy問題的診斷GC
- 二維偏序問題
- golang中判斷兩個slice是否相等與判斷值下的 陣列是否相等Golang陣列
- 十二個坑爹的Python陷阱Python
- 使用Android Studio 遇到的坑爹問題及解決方法(持續更新中)Android
- Aop踩坑!記一次模板類呼叫注入屬性為空的問題
- Map型別的的增刪查、判斷、迴圈輸出型別
- 記一次 rr 和硬體斷點解決記憶體踩踏問題斷點記憶體
- mongo shell中特殊判斷符號轉義的問題Go符號
- python 中hash 操作的 key 是否存在的判斷問題.Python
- 解決golang 的記憶體碎片問題Golang記憶體
- 坑爹的UEditor與springMVC的結合SpringMVC
- Python資料型別判斷常遇到的坑Python資料型別
- 記一次 Redis 容量 超限的問題Redis
- 記一次排查CPU高的問題
- MyBatis 基本資料型別條件判斷問題MyBatis資料型別
- 記一次oom問題排查OOM