为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕侠2389804 2021-11-22 18:22:16
我想知道为什么以下代码不起作用: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


查看完整回答
反对 回复 2021-11-22
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

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

检查 Go 规范:

https://golang.org/ref/spec#Declarations_and_scope


查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信