猿问

for 循环中的变量在外部未定义

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


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);

}

我删除了一些不相关的代码(因为这显然不是真正随机的)。


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


我试过使用randomString := fmt.Sprintf()你在上面看到的 var来设置它。


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


我怎样才能从那一点访问那个变量?基本上只显示最后生成的字符串。


慕侠2389804
浏览 216回答 2
2回答

白衣染霜花

请参阅规范中的相关部分:声明和范围:在函数内声明的常量或变量标识符的范围从 ConstSpec 或 VarSpec(短变量声明的 ShortVarDecl)的末尾开始,并在最里面的包含块的末尾结束。在你想要访问它的范围内定义它:在for(在main()函数范围内)之前。另请注意,fmt.Sprintf()除了要打印的参数之外,还需要一个附加参数:格式字符串。要么提供格式字符串(例如,包括参数的%s动词randomString),要么您可以使用fmt.Sprintln().func main() {&nbsp; &nbsp; var randomString string&nbsp; &nbsp; for i := 0; i < 10000; i++ {&nbsp; &nbsp; &nbsp; &nbsp; randomString = fmt.Sprintf("a%sa\n", "test")&nbsp; &nbsp; }&nbsp; &nbsp; fmt.Println("Made 10000 random strings like", randomString)}输出:Made 10000 random strings like atesta

翻翻过去那场雪

这是范围问题,在 Go 中,范围randomString是循环体,在 JS 中,它是整个函数。范围规则在不同的语言中有所不同。检查 Go 规范:https://golang.org/ref/spec#Declarations_and_scope
随时随地看视频慕课网APP

相关分类

Go
我要回答