記一次坑爹的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
- 記一次判斷值是否存在遇到的神奇問題
- map判斷值是否存在需要注意的問題
- golang 多維mapGolang
- Golang判斷url字首Golang
- 坑爹的Oracle 11.2.0.3Oracle
- 坑爹的Python陷阱(避坑指南)Python
- 踩了 Golang sync.Map 的一個坑Golang
- 坑爹的驗證碼。。
- 記錄一次電動維修遇到的坑
- golang判斷檔案是否存在Golang
- 記一次關於js陣列型別判斷及js型別判斷的細節探索JS陣列型別
- 十二個坑爹的Python陷阱Python
- Golang 學習——如何判斷 Golang 介面是否實現?Golang
- 記一次使用gdb診斷gc問題全過程GC
- .記一次使用gdb診斷gc問題全過程GC
- MySQL中case?when對NULL值判斷的踩坑記錄RTGYMySqlNull
- 一次gc buffer busy問題的診斷GC
- 二維偏序問題
- golang中判斷兩個slice是否相等與判斷值下的 陣列是否相等Golang陣列
- Aop踩坑!記一次模板類呼叫注入屬性為空的問題
- 記一次 rr 和硬體斷點解決記憶體踩踏問題斷點記憶體
- Map型別的的增刪查、判斷、迴圈輸出型別
- 判斷Map集合中是否存在某一個key
- 工作踩坑問題記錄
- 解決golang 的記憶體碎片問題Golang記憶體
- Python 判斷for迴圈最後一次的方法Python
- 記一次 Redis 容量 超限的問題Redis
- 記一次排查CPU高的問題
- 記一次問題發現
- 記一次oom問題排查OOM
- 記錄一次問題排查
- 深入理解 JavaScript 中的型別和型別判斷問題JavaScript型別
- JAVA關於判斷年份是閏年還是平年的問題Java
- 二維費用揹包問題
- 001_記一次ansible api二次開發遇到的小問題API
- 【數學問題】判斷一個數是否是素數
- 記一次PHP的Invalid binding type問題PHP