开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map: map 的 crud 操作】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/625/detail/9658
map 的 crud 操作
一.map 的增删改查操作
1.map 增加和更新(修改):
map ["key"] = value
//如果 key 还没有,就是增加,如果 key 存在就是修改。(这个说明十分重要)
func main(){
var cities map[string]string
cities = make(map[string]string,10)
cities[ "no1"]=“北京”
//如果没有 no1 这个 key 就是增加 cities["no2""]=“上海”//如果没有 no1 这个 key 就是增加 fmt.Printin(cities)
cities["no1"]=“天津”
//如果有 no1 这个 key 就是修改 fmt.Println(cities)
}
案例:
package main
import (
"fmt"
)
func main( {
//第二种方式
cities := make(map[string]string)
cities[ "no1"]="北京"
cities[ "no2"]=“天津”
cities[ "no3"] ="上海”
fmt.Println(cities)
}
因为前面没有 no1 2 3,所以这里相当于添加,如果此时在增加 no3,
//第二种方式
cities := make(map[string]string)
cities[ "no1"]="北京"
cities[ "no2"]=“天津”
cities[ "no3"] ="上海”
fmt.Println(cities)
//因为 no3 这个 key 已经存在,因此下面的这句话就是修改,no3 不存在就是增加,
cities[ "no3"]=“上海~"
fmt.Println(cities)
输出发现,修改成功,修改和添加主要是决定 key 是否存在。
2. map 删除
说明:
Delete(map,"key")
, delete 是一个内置函数,如果 key 存在,就删除该 key-value, 如果 key 不存在,不操作,但是也不会报错。
func delete:
func delete(m map[Type]Type1, key Type)
内建函数 delete 按照指定的键将元素从映射中删除。若 m 为 nil 或无此元素, delete 不进行操作。
案例:
//演示删除
delete(cities, "no1")
(这里删除no1)
fmt.Println(cities)
如果继续删除不存在的 no4:
//当 delete 指定的 key 不存在时,删除不会操作,也不会报错 delete(cities, "no4")
fmt.Println(cities)
细节说明
(1)如果我们要删除 map 的所有 key ,(有一些编程语言像 clean 可以直接全部删除,但是 go 里面没有这样一个方法,如果想删除只能遍历)没有一个专门的方法一次删除,可以遍历一下 key ,逐个删除(学完遍历就可以用 for 循环的办法删除。)
(2)或者 map = make(...),make 一个新的( 让 map 重新分配一个空间),让原来的成为垃圾,被 gc 回收
案例:
//如果希望一次性删除所有的 key
//1.遍历所有的 key ,然后逐一删除[遍历]
//2.直接 make 一个新的空间
cities = make(map[string]string)
fmt.Println(cities)
建议用第二种方法。
3. map 查找
案例:
var heroes map[string]string
heroes = make(map[string]string, 10)
heroes["no1"]=“宋江”
heroes["no2"]=“卢俊义”
val, findRes := heroes[ "no1"]
(首先可以找 map 取它的 key,它返回了两个数据,如果确实有这个值 findres 这个 key,value 就是对应的值)
if findRes {
fmt.Println("找到了val=", val)
}else {
fmt.Println(没有no1这个key")
}
说明:如果 heroes 这个 map 中存在“no1”",那么 findRes 就会返回 true,否则返回 false
案例:
//演示 map 的查找
val, ok := cities["no2"]
if ok {
fmt.Printf("有no1 key值为‰v\n", val)
}else {
fmt.Printf("没有no1 key\n")
}