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

  • 相关阅读:
    node版本切换工具n的使用介绍
    nrm -- npm镜像源管理
    npm vs npx
    Dnsmasq MacOS使用介绍
    Java动态生成类以及动态添加属性
    mysql表名忽略大小写问题记录
    psotgresql之大小写
    java 按字节读写二进制文件(Base64编码解码)
    java解析复杂json:JSONObject 和 JSONArray的使用
    URL编码:怎样读取特殊字符
  • 原文地址:https://www.cnblogs.com/williamjie/p/9933286.html
Copyright © 2011-2022 走看看