在 Go 中,for 循环内部不能访问外部变量,但是你可以通过将该变量传递给循环的函数参数来访问它。
例如:
package main
import "fmt"
func main() {
name := "John"
numbers := []int{1, 2, 3}
// 传递给匿名函数的参数为 i 和 num
for i, num := range numbers {
func(i, num int) {
fmt.Printf("%d: %s %d\n", i, name, num)
}(i, num)
}
}
这里我们在 for 循环内部创建了一个匿名函数,并将外部变量 name 和循环计数器 i 作为参数传递给该函数。这样,我们就可以在函数内部访问这些变量。
另外一种方法是使用闭包:
package main
import "fmt"
func main() {
name := "John"
numbers := []int{1, 2, 3}
// 使用闭包
for i, num := range numbers {
func() {
fmt.Printf("%d: %s %d\n", i, name, num)
}()
}
}
在这个例子中,我们定义了一个没有参数的匿名函数,并在循环内部调用它。由于闭包可以访问外部变量,这里我们可以在函数内部访问变量 name 和 num。