登录
首页 >  Golang >  Go问答

为什么我可以在 for 循环中多次重新定义同一个变量,但不能在循环之外?

来源:Golang技术栈

时间:2023-03-24 13:29:24 388浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《为什么我可以在 for 循环中多次重新定义同一个变量,但不能在循环之外?》,这篇文章主要会讲到golang等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

我有以下程序。

package main

import (
    "fmt"
)

func main() {
    for i := 0; i 

执行时我得到:

77
77

正如我们所见,x := 77已经执行了 2 次。但是,如果我像这样稍微修改它:

package main

import (
    "fmt"
)

func main() {
    a := 77
    fmt.Println(a)
    a := 77
    fmt.Println(a)
}

我会收到错误“左侧没有新变量:=”。为什么这个?

正确答案

这里有几件事。首先让我们解决你问题的后半部分。

声明变量的默认方法是使用var关键字,然后使用=运算符对其进行赋值。

var a int
a = 77

Go 为我们提供了一个快捷方式:=,既可以声明一个变量,也可以分配一个值

a := 77

在您的示例中,当您:=第二次使用时,您试图重新声明一个a在同一范围内命名的新变量,这是不允许的。该错误no new variables on left side of :=试图告诉您这一点。

但是现在对于您最初的问题,为什么您可以在 for 循环中多次执行此操作?

原因是每次输入花括号块时,{}您都在创建一个新的嵌套范围。当您x在循环顶部声明变量时,它是一个新变量,并且在循环结束时超出范围。当程序再次回到循环顶部时,它是另一个新范围。

例如看这段代码

{
    x := 77
    fmt.Println(x)
}
fmt.Println(x) // Compile error

第二个Println失败,因为x该范围内不存在。

到这里,我们也就讲完了《为什么我可以在 for 循环中多次重新定义同一个变量,但不能在循环之外?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于golang的知识点!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表