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