Go进阶(9): For Range 性能研究

本文探讨了Go语言中for range循环在遍历数组、map和Slice时的性能表现。对比了常规for循环,指出for range在处理Slice时由于值拷贝导致性能下降,而通过指针引用可以优化这一问题。在遍历map时,由于内部机制,for range的性能通常较低且不易优化。文章深入分析了for range的实现原理,并提供了性能测试结果。
摘要由CSDN通过智能技术生成

遍历数组,map集合,Slice切片等,Go提供比较好用的For Range方式。range是一个关键字,表示范围,和for配合使用可以迭代数组,map等集合。用法简洁,而且map、channel等也都是用for range的方式,所以在编码中我们使用for range进行循环迭代是最多的。对于这种最常使用的迭代,尤其是和for i=0;i<N;i++对比,性能怎么样?需要深入了解。

1. 基本用法

package main
import "fmt"
func main() {
    ages:=map[string]int{"张三":15,"李四":20,"王武":36}
    for name,age:=range ages{
        fmt.Println(name,age)
    }
}

>> 张三 15
>> 李四 20
>> 王武 36

在使用for range迭代map的时候,返回的第一个变量是key,第二个变量是value.需要注意的是,for range map返回的K-V键值对顺序是不固定的,是随机的.

2. 与常规的for循环进行对比

比如对于 Slice 切片,我们有两种迭代方式:一种是常规的for i:=0;i<N;i++的方式;一种是for range的方式,下面我们看看两种迭代的性能。

func ForSlice(s []string) {
    len := len(s)
    for i := 0; i < len; i++ {
        _, _ = i, s[i]
    }
}
 
func RangeForSlice(s []string) {
    for i, v := range s {
        _, _ = i, v
    }
}

为了测试,写了这两种循环迭代 Slice 切片的函数,从实现上看&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值