我是Go语言的新手,想知道为什么下面的代码不起作用;
package main
import (
"fmt"
)
func main() {
for i := 0; i < 10000; i++ {
var randomString = fmt.Sprintf("a%sa\n", "test")
}
fmt.Printf("Made 10000 random strings like", randomString);
}
Run Code Online (Sandbox Code Playgroud)
我删除了一些不相关的代码(因为这显然不是随机的).
我遇到的问题是在for循环之下,"randomString"是未定义的.
我已经尝试使用randomString := fmt.Sprintf()你在上面看到的var进行设置.
我很确定这是一个范围问题(randomString变量不在for-loop之外的范围内),但作为一个PHP/JS开发人员,我不习惯这个并且会说这个变量也可用在for循环之后.
如何从该点访问该变量?基本上只显示最后生成的字符串.
请参阅规范中的相关部分:声明和范围:
在函数内声明的常量或变量标识符的范围从ConstSpec或VarSpec(短变量声明的ShortVarDecl)结束开始,并在最内层包含块的末尾结束.
在您要访问它的范围内定义它:在for(在main()函数范围内)之前.
另请注意,fmt.Sprintf()除了要打印的参数外,还需要一个额外的参数:格式字符串.提供格式字符串(例如,包括参数的%s动词randomString)或者您可以使用fmt.Sprintln().
func main() {
var randomString string
for i := 0; i < 10000; i++ {
randomString = fmt.Sprintf("a%sa\n", "test")
}
fmt.Println("Made 10000 random strings like", randomString)
}
Run Code Online (Sandbox Code Playgroud)
输出:
Made 10000 random strings like atesta
Run Code Online (Sandbox Code Playgroud)
在Go Playground尝试一下.