golang Map和指针优化

小编不啰嗦,直接上代码:
在这里插入图片描述
执行结果:
在这里插入图片描述

这里的内存分配容量和次数都为0,因为此次定义的数据量较小,直接忽略不计。

结果:带指针的结构明显执行速度比值传递快。
为什么会发生这样的情况呢,而且在我以前的文章中也能找到,频繁的带入指针,
还会影响到Gc回收,造成压力,那么在此处,为何性能快了这么多。

原因:值传递,传入过去会分配两个内存空间,意思是内存会分配两个容量存储。
而直接使用指针的话,可以直接指向之前的地址,而无需分配内存了,这样能极大地加快效率。
这个时候就需要区分定义:
go自带类型,使用值传递,不为不必要的性能去造成gc压力。
自定义类型,使用指针,尤其是大型结构。

初始化提示。
在使用make等允许初始化容量的话,建议根据这个容量的大小,直接对应分配具体的大小,这样可以减少内存分配,而且数组等一些类型都是以double形式进行新增内存容量的,这个时候,这样的操作就非常有必要了。
这个初始化也做了实现,自己去做吧,我就不提供代码了。
有不解之处,或者有建议的话,可以详细交流。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值