zoukankan      html  css  js  c++  java
  • 记一次坑爹的golang 二维map判断问题

    记一次坑爹的golang 二维map判断问题

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35440678/article/details/83154780

    现象

    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后重新makemap[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
    }
    ---------------------
    作者:yinnnnnnn
    来源:CSDN
    原文:https://blog.csdn.net/qq_35440678/article/details/83154780
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    变形与动画
    验证状态、禁用
    选择列表和可多选的选择列表
    浏览——选择文件
    引用
    <abbr> 元素的样式为显示在文本底部的一条虚线边框,当鼠标悬停在上面时会显示完整的文本(只要您为 <abbr> title 属性添加了文本)
    bootstrap强调类名
    bootstrap列排序
    jsp变量的使用规则
    随机生成30个四则运算算式
  • 原文地址:https://www.cnblogs.com/williamjie/p/9933286.html
Copyright © 2011-2022 走看看