go语言的map

go语言map

go语言的map是一个key-value的数据结构,它是go提供的映射关系的容器,内部使用hash实现。map是引用类型,必须初始化才能使用。

map的定义

package main

import "fmt"

func main() {
	//声明一个空的map,没有申请到内存
	//var dict map[string] string
	// 空的map不可以直接使用,这个是错误的
	//dict["user"] = "ivy"
	//fmt.Println(dict) // panic: assignment to entry in nil map
	var dict = map[string]string{"user": "ivy",}
	// 给map设置key-value
	dict["age"] = "18"
	fmt.Println(dict) // map[age:18 user:ivy]

	dict1 := make(map[string]string, 10)
	dict1["user"] = "ivy"
	fmt.Println(dict1) // map[user:ivy]
}

  • 空的map(nil)没有申请内存空间的不可以直接使用
  • 可以使用make来声明一个申请内存的空map,此时的map可以直接被使用
  • map相当于python的字典,没有顺序,但它的键和值都必须为声明时键值的类型
  • map的取值直接使用map[key]即可
  • map的赋值直接使用map[key] = value

map取值

package main

import "fmt"

func main() {
	dict := make(map[string]string, 10)
	value, ok := dict["data"]
	if !ok {
		fmt.Println("没有这个值!") // 没有这个值!
	} else {
		fmt.Println(value)
	}
}

map取值的时候会返回value和一个布尔值,布尔值代表有没有取到值,value为取到的值

map的遍历

package main

import "fmt"

func main() {
	dict := map[string]string{
		"user": "ivy",
		"age":  "18",
		"sex":  "male",
	}

	for k, v := range dict {
		fmt.Println(k, v)
		//sex male
		//user ivy
		//age 18
	}
}

map的删除

map的删除使用的是内置的delete函数
delete不同于slice的append,delete直接作用的是原来的对象,而append返回的是新的对象

package main

import "fmt"

func main() {
	dict := map[string]string{
		"user": "ivy",
		"age":  "18",
		"sex":  "male",
	}

	delete(dict, "user")
	fmt.Println(dict) // map[age:18 sex:male]
	delete(dict, "hobby")
	fmt.Println(dict) // map[age:18 sex:male]
}

当时用delete去删除一个不存在的key时,此次delete不会报错
直接使用goland查看delete的源码的dockey看到

// The delete built-in function deletes the element with the specified key
// (m[key]) from the map. If m is nil or there is no such element, delete
// is a no-op.

当key不存在时,delete不做任何操作

原文地址:https://www.cnblogs.com/ivy-blogs/p/12654668.html