zoukankan      html  css  js  c++  java
  • Go Map

    map

    map使用散列表(hash)实现

    添加关联到map并访问关联和数据

    map[Key_Type]Value_Type

    scene := make(map[string]int)
    scene["route"] = 66
    fmt.Println(scene["route"])
    v :=scene["route2"]    //尝试查找一个不存在的键,返回的将是value_type的默认值
    fmt.Println(v)
    
    /**
    66
    0
    */
    

    填充内容方式

    m := map[string]string{
        "W": "forward",
        "A": "left",
        "D": "right"
    }
    

    并没有使用make,而是使用大括号进行内容定义,就像json格式一样,健值对,并使用逗号分割。

    取值

    m = map[string]int{}
    i := m["route"]
    
    

    如果route存在,就返回那个值,如果不存在,返回0值,也就是说,根据这个value的类型,返回缺省值,比如string,就返回“”,int 就返回0

    判断map中key是否存在

    if _, ok := map[key]; ok {
    //存在
    }
    
        m := make(map[string]string)
    	m["b"] = "1"
    	val,exist := m["a"]
    	val1,exist1 := m["b"]
    	fmt.Println(val,exist)
    	fmt.Println(val1,exist1)
    //	 false
    //    1 true
    
    

    delete()从map中删除健值对

    delete(map, 键)
    //map 要删除的实例
    

    清空map中的所有元素

    清空map的唯一办法就是重新make一个新的map。
    不用担心垃圾回收的效率,Go中的并行垃圾回收效率比写一个清空函数高效的多。

    能够在并发环境中使用的map——sync.Map

    Go中的map在并发环境下,只读是线程安全的,同时读写线程不安全。

    package main
    
    func main() {
    	m := make(map[int]int)
    	// 并发情况下读写 map 时
    	go func(){
    		// 不停地对map进行写入
    		for {
    			m[1] = 1
    		}
    	}()
    
    	go func(){
    		// 不停地对map进行读取
    		for {
    			_ = m[1]
    		}
    	}()
    
    	// 无限循环, 让并发程序在后台执行
    	for {
    		_:
    	}
    }
    

    出现错误: fatal error: concurrent map read and map write

    使用sync.map (对key加锁)

    package main
    
    import (
    	"fmt"
    	"sync"
    )
    
    func main() {
    	m := sync.Map{}
    	// 并发情况下读写 map 时
    	go func(){
    		// 不停地对map进行写入
    		for {
    			m.Store(1,1)
    		}
    	}()
    
    	go func(){
    		// 不停地对map进行读取
    		for {
    			_,err := m.Load(1)
    			fmt.Println(err)
    		}
    	}()
    
    	// 无限循环, 让并发程序在后台执行
    	for {
    		_:
    	}
    }
    
  • 相关阅读:
    SCRUM第一天
    第八周总结
    第7周总结
    团队项目nabcd
    人月神话1
    课堂练习之四则运算
    第六周总结
    Storm Grouping —— 流分组策略
    抓取网页内容生成Kindle电子书(转)
    浅析PageRank算法(转)
  • 原文地址:https://www.cnblogs.com/followyou/p/12355313.html
Copyright © 2011-2022 走看看