Golang关于map的三种声明定义方式

Go语言中的map类型类似于Python的dict,基于哈希存储,元素无序。声明map有三种方式:1)先声明变量再用make分配空间;2)直接用make初始化;3)初始化时动态开辟内存并赋值。使用map时,可通过key获取value,时间复杂度为O(1),且在函数中传递map相当于引用传递,可直接修改其值。
摘要由CSDN通过智能技术生成

 定义

          map,在golang中定义为map[string][string],类比为python中的dict,内部实现也是通过哈希存储的,内部的元素是无序的。

方式1:

    * 通过 var xx map[type]type,来进行声明一个map;

此时的myMap是一个空变量,为开辟实际空间进行赋值,是一个空占8字节的变量;

需要通过make(map[string]string),以声明的类型为准,进行空间开辟,后续才可以进行赋值,否则会报越界错误;

 

方式2:

        通过直接x:=make(map[string]string),不需要先定义一个map类型的空变量,因为make内置方法会根据你传入的类型,返回具体类型,通过:=来接收。

方式3:

        初始化方式创建map;

        这种方法用的比较多,不需要make去申请内存分配;通过定义一个map类型变量并初始化,可以动态开辟内存,并赋值;

  * 细节,map内部最后一个元素末尾要带逗号,这是go语法规定;

    

使用:

        总的来说,使用也是通过key:value,以O(1)的复杂度在数据体中查询值,特别需要注意,对于map,可以简单理解为,通过类型的指定,map在函数中的传递可以理解为是"引用传递",即可以通过指针寻址,对指定值进行修改;

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Golang 中,可以使用指针来操作 map。当我们传递 map 作为参数时,实际上是传递了 map 的一个副本。如果需要修改原始 map,可以传递 map 的指针,或者在函数内部返回 map 的指针。 以下是一个使用 map 指针的示例代码: ```go package main import "fmt" func main() { m := make(map[string]int) m["a"] = 1 m["b"] = 2 // 传递 map 的指针 addValue(&m, "c", 3) fmt.Println(m) // 输出:map[a:1 b:2 c:3] // 返回 map 的指针 m2 := createMap() fmt.Println(m2) // 输出:map[x:10 y:20 z:30] } func addValue(m *map[string]int, key string, value int) { (*m)[key] = value } func createMap() *map[string]int { m := make(map[string]int) m["x"] = 10 m["y"] = 20 m["z"] = 30 return &m } ``` 在上面的示例中,我们定义了两个函数,`addValue` 和 `createMap`,分别演示了如何传递 map 的指针和返回 map 的指针。在 `addValue` 函数中,我们使用 `*` 操作符来获取 map 的指针,并修改了原始的 map。在 `createMap` 函数中,我们使用 `&` 操作符来返回 map 的指针。 ### 回答2: 在Go语言中,map是一种无序的键值对集合,可以用于存储和检索数据。默认情况下,map是通过值传递的,即将map赋值给另一个变量时,会复制一份map的副本。但我们也可以使用指针来操作map,从而可以在函数间共享和修改同一个map。 使用指针来操作map有两种常见的方式。一种是直接声明一个指向map的指针变量,然后通过间接引用来操作map。例如: ```go var m *map[string]int // 声明指向map的指针变量 m = &map[string]int{} // 创建一个空的map,并将其地址赋值给指针变量 (*m)["key"] = 123 // 通过指针间接引用map,并修改其值 ``` 另一种方式是使用make函数创建一个map,并将其指针传递给函数。例如: ```go func modifyMap(m *map[string]int) { (*m)["key"] = 123 // 通过指针间接引用map,并修改其值 } func main() { m := make(map[string]int) // 创建一个map modifyMap(&m) // 将map的指针传递给函数 } ``` 需要注意的是,在使用指针操作map时,要确保map已经被初始化。否则,会发生运行时错误。另外,由于map本身就是引用类型,因此大部分情况下,直接使用map而不是指针就可以满足需求,而且更加简单和安全。只有在需要在函数间传递和修改同一个map时,才需要使用指针来操作map。 ### 回答3: Golang中的map是一种无序的键值对集合,而map指针则是指向map的内存地址的指针。 在使用map时,可以通过var关键字声明一个map变量,并使用make函数来初始化该map。而如果需要使用map指针,可以通过将map变量的地址赋值给指针变量来实现。 下面是一个示例代码: ``` package main import "fmt" func main() { // 声明并初始化map myMap := make(map[string]int) myMap["apple"] = 2 myMap["banana"] = 3 // 声明并初始化map指针 var myMapPtr *map[string]int myMapPtr = &myMap // 使用map指针修改map (*myMapPtr)["apple"] = 5 // 输出修改后的值 fmt.Println(myMap["apple"]) } ``` 在上述代码中,首先使用make函数初始化了一个map变量myMap,并给其中的键"apple"和"banana"分别赋值。然后,使用var关键字声明了一个map指针myMapPtr,并将myMymap的地址赋值给了myMapPtr。接下来,使用map指针修改了map中键"apple"的值为5。最后,输出了map中键"apple"的值,结果为5。 总结来说,Golangmap指针允许我们通过指针来修改和访问map的值,更灵活地操作Map的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值