目录
  • 概述
  • 语法
    • 声明和初始化
    • 读取
    • 删除
    • 遍历
  • 总结
    • 示例

      概述

      • map是基于key-value键值对的无序的集合
      • go语言中的map是引用类型
      • 必须初始化才能使用。

      语法

      声明和初始化

      配合make使用,否则是nil

      var map[keytype]valuetype
      //keytype:表示键的类型
      //valuetype:表示键对应的值的类型
      make(map[keytype]valuetype, [cap])
      //cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量
      //当你的容量超过时会自动扩充
      

      例子:

      //1.声明
      var name1 map[int]string   //key是int,value是string
      var name2 map[string]string  //key是string,value是string
      //字面量
      names3:=map[int]string{0:"张三",1:"李四"}
      //2.分配内存
      name1 = make(map[int]string, 2)         //2:map的容量,当你的容量超过时会自动扩充
      name2 = make(map[string]string, 2)
      //3.赋值
      //3.1 通过keytype赋值
      name1[0]="张三"   //key:0   value:张三
      name1[1]="李四"   //key:1   value:李四
      name1[2]="王五"   //key:2   value:王五    //已经超过了分配的的容量,会自动扩充
      name2["a"]="张三"
      name2["b"]="李四"
      

      读取

      根据keytype来读取

      如果keytype存在,就返回那个值,如果不存在,返回类型默认值值

      fmt.println(name1[0])
      fmt.println(name2["b"])
      

      测试map中key值是否存在

      通过keytype来取值时,会返回两个值,一个是vlue,另一个是是否存在的bool

      if value, ok := name1[5]; ok {
      	fmt.println("存在这个值",value)
      } else {
      	fmt.println("不存在这个值", value)
      }
      

      删除

      delete(map[int]string,[keytype])
      

      例子

      delete(name1 , 1)
      

      遍历

      range
      

      例子:

      for key,value:=range name1 {
      	fmt.printf("key=%d,value=%s\n",key,value)
      }
      for key,value:=range name2 {
      	fmt.printf("key=%s,value=%s\n",key,value)
      }
      

      总结

      1. map必须借助make分配内存空间,否则是nil
      2. 字面量初始化必修保证key是唯一的,否则error
      3. map传递的是引用,就是说形参会改变实参的值
      4. 直接对map对象使用[]操作符获得的对象不能直接修改状态
      5. map中存储指针而不是结构体

      示例

      package main
      import "fmt"
      func main() {
      	//一、声明和初始化【配合make使用,否则是nil】
      	//1.声明
      	var name1 map[int]string    //key是int,value是string
      	var name2 map[string]string //key是string,value是string
      	//2.分配内存
      	name1 = make(map[int]string, 2) //2:map的容量,当你的容量超过时会自动扩充
      	name2 = make(map[string]string, 2)
      	//3.赋值
      	//3.1 通过keytype赋值
      	name1[0] = "张三" //key:0   value:张三
      	name1[1] = "李四" //key:1   value:李四
      	name1[2] = "王五" //key:2   value:王五    //已经超过了分配的的容量,会自动扩充
      	name2["a"] = "张三"
      	name2["b"] = "李四"
      	//二、读取
      	//	1. 根据keytype来读取,如果keytype存在,就返回那个值,如果不存在,返回类型默认值值
      	fmt.println(name1[0])
      	fmt.println(name2["b"])
      	//	2. 测试map中key值是否存在【通过keytype来取值时,会返回两个值,一个是vlue,另一个是是否存在的bool】
      	if value, ok := name1[2]; ok {
      		fmt.println("存在这个值", value)
      	} else {
      		fmt.println("不存在这个值", value)
      	}
      	//三、删除
      	delete(name1, 1)  //删除了李四
      	delete(name2, "c")   //没有这个c
      	fmt.println(name1)
      	fmt.println(name2)
      	//四、遍历
      	for key,value:=range name1 {
      		fmt.printf("key=%d,value=%s\n",key,value)
      	}
      	for key,value:=range name2 {
      		fmt.printf("key=%s,value=%s\n",key,value)
      	}
      }
      
      

      以上就是go语言基础map用法及示例详解的详细内容,更多关于go语言基础的资料请关注www.887551.com其它相关文章!