我想知道为什么以下代码不起作用:package mainimport ( "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 循环之后。我怎样才能从那一点访问那个变量?基本上只显示最后生成的字符串。
2 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
请参阅规范中的相关部分:声明和范围:
在函数内声明的常量或变量标识符的范围从 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)
}
输出:
Made 10000 random strings like atesta
翻翻过去那场雪
TA贡献2065条经验 获得超14个赞
这是范围问题,在 Go 中,范围randomString
是循环体,在 JS 中,它是整个函数。范围规则在不同的语言中有所不同。
检查 Go 规范:
https://golang.org/ref/spec#Declarations_and_scope
- 2 回答
- 0 关注
- 214 浏览
添加回答
举报
0/150
提交
取消