go map 类型用法

本文深入探讨了Go语言中字典(map)的各种操作,包括零值nil的使用,字面量初始化,make()函数的预分配,无序遍历for...range...,长度获取len(),赋值,查询,delete()删除以及清空字典的方法。通过具体代码示例,展示了不同类型数据在字典中的存储和读取过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 引用类型
  • 零值nil
  • 字面量
  • 初始化/构造 make()
  • 无序遍历 for…range…
  • 长度 len()
  • 赋值
  • 查询
  • delete()
  • 赋个空字典的就是清空

例子

package main

import "fmt"

func main() {

	//零值nil
	var m0 map[int]int

	//字面量
	var m1 = map[int]int{0: 10, 2: 12, 4: 14}

	//make()
	var m2 = make(map[int]int, 3) //len = 0,预分配容量 = 3

	//for...range...
	for i, v := range m1 { //无顺序遍历
		fmt.Println(i, v) //4 14, 0 10, 2 12
	}

	//len()
	fmt.Println(len(m0), len(m1), len(m2)) //0 3 0
	fmt.Println(m0, m1, m2)                //map[] map[0:10 2:12 4:40] map[]

	type ft func(op int) int
	m := map[int]ft{}

	//赋值
	m[1] = nil
	m[2] = func(op int) int { return op }

	//读取
	vf := m[0]              //nil
	vt := m[1]              //nil
	vv := m[2]              //0x492e80
	fmt.Println(vf, vt, vv) //<nil> <nil> 0x492fc0

	vf, ok := m[0]                 //m[0]不存在 (ok=false),用索引类型的零值(nil)表示 (vf=nil)
	fmt.Printf("%#v %v\n", vf, ok) //(main.ft)(nil) false

	vt, ok = m[1]                  //m[1]存在 (ok=true),值为 nil (vf=nil)
	fmt.Printf("%#v %v\n", vt, ok) //(main.ft)(nil) true

	vv, ok = m[2]                  //m[2]存在 (ok=true),值为 0x492e80 (vf=0x492e80)
	fmt.Printf("%#v %v\n", vv, ok) //(main.ft)(0x492e80) true

	//delete()
	delete(m, 2)
	fmt.Println(m)

	//赋个空字典的就是清空
	m = map[int]ft{}
	fmt.Println(m)
}

输出

4 14
0 10
2 12
0 3 0
map[] map[0:10 2:12 4:14] map[]
<nil> <nil> 0x492fc0
(main.ft)(nil) false
(main.ft)(nil) true
(main.ft)(0x492fc0) true
map[1:<nil>]
map[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值