golang map 初始化 和 使用

目录

声明与初始化

使用 map


 计算机科学中最有用的数据结构之一就是哈希表。 许多散列表实现存在不同的属性,但通常它们提供快速查找,添加和删除。Go提供了一个内置的map 类型,去实现一个哈希表。

声明与初始化

声明 一个 map 类型像这样:

map[keyType]valueType

键(key)的类型可以是任意可比较的类型,值(value)的类型可以是任意类型,甚至是另一个 map 类型

下面的变量 m 是一个字符串键到int值的映射:

var m map[string]int

Map类型是引用类型,像指针或切片一样,所以上面的m值是nil; 它没有指向一个初始化的map。 当读取像上面声明的空map时返回为nil,但试图写入上面这样的空map 时将导致运行错误; 不要这样做。 要先初始化map,请使用内置的make函数:

m = make(map[string]int)

make函数将分配并初始化一个散列 map 数据结构,并返回指向它的指针。该数据结构的细节是运行时的实现细节,并不是由语言本身指定的。 在本文中,我们将重点介绍地图的使用,而不是它们的实现。

使用 map

Go 提供了一种大家熟悉的语法去使用 map. 

以下语句将设置 字符串 为"route"的key 映射 到值为66 的value:

m["route"] = 66

以下语句检索key 为 "route" 的值, 并将它赋值给新的变量 i :

i := m["route"]

以下语句 如果请求的 key 不存在,我们将返回value Type  的空值。例子中情况下,值类型为 int, 因此值为 0:

j := m["root"]

j==0

以下语句 使用内置的 len 函数返回map 的长度(多少个已赋值的 key )

n := len(m)

以下语句 使用内置的delete 函数来删除  map 的一条映射:

delete(m, "route")
fmt.Println(len(m))
// 0

当你删除一个不存在的 key 时,它不会做执行任何操作( 不会报错)
以下语句 一个有两个的返回值用来测试 是否 存在该key:

i, ok  := m["route"]

在这个语句中,第一个值 i 被分配到 key 为“route”映射的值。如果该 key 不存在,返回值类型的空值. 第二个值 ok 是一个 bool 类型,如果该 key 存在于map中,则为 true, 如果没有,则为false。
以下语句 如果你要在不检索值的情况下,测试一个 key , 可以用 下划线 代替第一个变量:

_, ok  := m["route"]

以下语句 遍历一个 map:

for key, value := range m {
    fmt.Println("key:", key, "value:", value)
}

以下语句 使用一些数据初始化数据:

commits := map[string]int{
            "rsc": 3711,
            "r":      2148,
            "gri":  1908,
            "adg":  912,
}

相同的语法可以用来初始化一个空映射, 它在功能上与使用 make 函数一样:

m = map[string]int{}

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Go语言中,结构体的初始化可以通过以下几种方法来完成。首先,可以使用键值对的方式来初始化结构体的成员变量。例如,定义一个名为cat的结构体,包含name、age和sex三个成员变量,可以通过以下方式进行初始化: cat1 := cat{ name: "小白", age: 12, sex: "male", } 另一种初始化结构体的方法是使用多个值的列表来初始化结构体的成员变量。例如,可以按照结构体定义的顺序依次传入相应的值进行初始化: cat1 := cat{"小白", 12, "male"} 还可以使用指针类型的结构体进行初始化。例如,定义一个指向cat结构体的指针类型变量,可以通过以下方式进行初始化: cat1 := &cat{ name: "小白", age: 12, sex: "male", } 最后,还可以使用匿名结构体进行初始化。匿名结构体没有定义结构体类型名,直接使用花括号{}进行初始化。例如: cat1 := struct { name string age int sex string }{ name: "小白", age: 12, sex: "male", } 这些是几种常见的初始化结构体的方法,根据实际情况选择适合的方式进行初始化即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Go语言结构体如何进行初始化](https://blog.csdn.net/weixin_52723461/article/details/124819621)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Golang结构体和map](https://download.csdn.net/download/weixin_38731199/14037169)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值