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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    架构之路(六):把框架拉出来
    读取mdb文件
    基类、子类之间的类型转换
    WPF Trigger
    WPF 打开txt文件
    C# 匿名方法
    自定义显隐式类型转换
    枚举获得Description扩展方法
    IFormattable和IFormatProvider
    WPF DataGrid下滑动态加载数据
  • 原文地址:https://www.cnblogs.com/williamjie/p/9933286.html
Copyright © 2011-2022 走看看