在Go中,如果我想做500次,但我不需要使用索引,有没有办法循环而不分配整数?
喜欢:
for i := 0; i < 500; i++ {
PlayRandomGame()
}
Run Code Online (Sandbox Code Playgroud)
我不需要或不想在i
那里分配.
该代码中的任何内容都不需要i
在堆上分配.它可能在堆栈上,当它超出范围时释放,或者在寄存器中释放,并且在任何一种情况下都不会产生垃圾.(如果您对这种可能性感到好奇,那么该技术称为转义分析.)您可以在此示例程序中看到TotalAlloc不会增加的方式:
package main
import (
"fmt"
"runtime"
)
func loop() {
for i := 0; i < 500; i++ {
}
}
func main() {
m1, m2 := new(runtime.MemStats), new(runtime.MemStats)
runtime.ReadMemStats(m1)
loop()
runtime.ReadMemStats(m2)
fmt.Println("TotalAlloc delta was", m2.TotalAlloc - m1.TotalAlloc)
}
Run Code Online (Sandbox Code Playgroud)
一个计数器是必要的,以确保你以一种方式或另一种方式进行500次循环迭代,所以即使你找到一些方法使计数器暗示(r := make([]struct{}, 500); for range r {...}
比方说),也没有变量名称,但仍然是一个计数器下的盖子.