猿问

在 Go 中没有分配的循环

在 Go 中,如果我想做 500 次,但我不需要使用索引,有没有办法在不分配整数的情况下进行循环?


喜欢:


for i := 0; i < 500; i++ {

    PlayRandomGame()

}

我不需要或不想在i那里分配。


jeck猫
浏览 245回答 2
2回答

aluckdog

该代码中的任何内容都不需要i在堆上分配。它可能在堆栈上,超出范围时被释放,或者在寄存器中,并且在任何一种情况下都不会产生垃圾。(如果您对这如何可能感到好奇,则该技术称为转义分析。)您可以在此示例程序中 TotalAlloc 如何不增加中看到它:package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "runtime")func loop() {&nbsp; &nbsp; for i := 0; i < 500; i++ {&nbsp; &nbsp; }}func main() {&nbsp; &nbsp; m1, m2 := new(runtime.MemStats), new(runtime.MemStats)&nbsp; &nbsp; runtime.ReadMemStats(m1)&nbsp; &nbsp; loop()&nbsp; &nbsp; runtime.ReadMemStats(m2)&nbsp; &nbsp; fmt.Println("TotalAlloc delta was", m2.TotalAlloc - m1.TotalAlloc)}一个计数器是必要的,以确保您以一种或另一种方式执行 500 次循环迭代,因此即使您找到某种方法使计数器隐含(r := make([]struct{}, 500); for range r {...}例如),也不会有变量名称但仍然是一个计数器盖子。

白衣染霜花

如果你讨厌计数器,你可以使用这个:for _ = range make([]struct{}, 500) {&nbsp; &nbsp; PlayRandomGame()}但是带有计数器的变体更加惯用。
随时随地看视频慕课网APP

相关分类

Go
我要回答