go 中 map 使用细节

一 点睛

1 map 是引用类型,遵守引用类型传递的机制,在一个函数接收 map,修改后,会直接修改原来的 map。

2 map 的容量达到后,给 map 增加元素,会自动扩容,并不会发生 panic,也就是说 map 能动态的增长键值对(key-value)。

3 map 的 value 也经常使用 struct  类型,更适合管理复杂的数据。

二 代码

package main

import (
   "fmt"
)

func modify(map1 map[int]int) {
   map1[10] = 900
}

// 定义一个学生结构体
type Stu struct {
   Name    string
   Age     int
   Address string
}

func main() {
   // 一 map 是引用类型,遵守引用类型传递的机制,在一个函数接收 map,修改后,会直接修改原来的 map
   map1 := make(map[int]int, 2)
   map1[1] = 90
   map1[2] = 88
   // 二 map 能自动扩容
   map1[10] = 1
   map1[20] = 2
   modify(map1)
   // map1[10] = 900 ,说明 map 是引用类型
   fmt.Println(map1)
   // 三 map 的 value 也经常使用 struct 类型。 更适合管理复杂的数据(比前面 value 是一个 map 更好)。
   // 比如 value 为 Student 结构体
   // 1 map 的 key 为 学生的学号,是唯一的。
   // 2 map 的 value 为 结构体,包含学生的名字,年龄, 地址。
   students := make(map[string]Stu)
   // 创建 2 个学生
   stu1 := Stu{"tom", 18, "北京"}
   stu2 := Stu{"mary", 28, "上海"}
   students["no1"] = stu1
   students["no2"] = stu2
   fmt.Println(students)
   // 遍历各个学生信息
   for k, v := range students {
      fmt.Printf("学生的编号是%v \n", k)
      fmt.Printf("学生的名字是%v \n", v.Name)
      fmt.Printf("学生的年龄是%v \n", v.Age)
      fmt.Printf("学生的地址是%v \n", v.Address)
      fmt.Println()
   }
}

三 测试

map[1:90 2:88 10:900 20:2]

map[no1:{tom 18 北京} no2:{mary 28 上海}]

学生的编号是no1

学生的名字是tom

学生的年龄是18

学生的地址是北京

 

学生的编号是no2

学生的名字是mary

学生的年龄是28

学生的地址是上海

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值