Go 外部未定义的循环中的变量

Go 外部未定义的循环中的变量,go,scope,Go,Scope,我想知道为什么下面的代码不起作用: 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); } 主程序包 进口( “fmt” )

我想知道为什么下面的代码不起作用:

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);
}
主程序包
进口(
“fmt”
)
func main(){
对于i:=0;i<10000;i++{
var randomString=fmt.Sprintf(“a%sa\n”,“测试”)
}
fmt.Printf(“生成10000个随机字符串,如”,randomString);
}
我剥离了一些不相关的代码(因为这显然不是随机的)

我遇到的问题是,在for循环下,“randomString”是未定义的

我试着使用
randomString:=fmt.Sprintf()
和上面看到的变量设置它

我很确定这是一个范围问题(randomString变量不在for循环之外的范围内),但作为一名PHP/JS开发人员,我不习惯这样做,我会说该变量在for循环之后也可用


如何从该点访问该变量?基本上只是显示最后生成的字符串。

请参阅规范中的相关部分:

在函数中声明的常量或变量标识符的范围从ConstSpec或VarSpec(ShortVarDecl表示短变量声明)的末尾开始,结束于最内部包含块的末尾

在要访问它的范围内定义它:在
for
之前(在
main()
函数的范围内)

还要注意,除了要打印的参数外,还需要一个附加参数:格式字符串。提供格式字符串(例如,为
随机字符串
参数包含
%s
动词),或者您也可以使用


在上尝试它。

这是范围问题,在Go中,
randomString
的范围是循环体,在JS中它将是整个函数。范围界定规则在不同的语言中有所不同

检查Go规范:


啊!那太明显了,我没看见。很好,谢谢:)事实上,我忘记了格式化字符串中的%s。但是Println在这方面也很好。谢谢,但是我在问问题之前已经检查了那个页面-它没有为我澄清问题。我知道我有范围问题,所以我提出了这个问题。@RobQuist这种情况的相关部分是“函数中声明的常量或变量标识符的范围从ConstSpec或VarSpec(ShortVarDecl表示短变量声明)的末尾开始,到最里面的包含块的末尾结束。”没错:)不过谢谢你的努力!
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)
}
Made 10000 random strings like atesta