MST
星途 面试题库

面试题:Go语言切片遍历方式及性能差异

请列举Go语言中切片(Slice)常见的遍历方式,并简要说明不同遍历方式在性能上可能存在哪些差异。
12.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. for 循环遍历

    s := []int{1, 2, 3}
    for i := 0; i < len(s); i++ {
        fmt.Println(s[i])
    }
    
    • 性能:直接通过索引访问切片元素,在编译时,编译器可以对这种方式进行优化,使得访问内存的过程更加高效。因为它是顺序访问内存,符合 CPU 缓存的预取机制,对于较大的切片,性能较好。
  2. for - range 遍历

    s := []int{1, 2, 3}
    for index, value := range s {
        fmt.Println(index, value)
    }
    
    • 性能for - range 方式在底层实现上是通过迭代器来实现的。它会在每次迭代时创建迭代变量的副本,对于大切片,这种副本创建会带来额外的开销。但它语法简洁,并且能同时获取索引和值。在不需要索引时,可以使用 _ 忽略索引,如 for _, value := range s。总体来说,在性能敏感的场景下,for 循环直接遍历可能会略优于 for - range,但差距通常较小,在一般应用中可以优先选择更简洁的 for - range 方式。