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不做任何操作