Go语言里简短声明语句词法域问题

Go语言里简短声明语句词法域问题

简短变量声明语句只有对已经在同级词法域声明过的变量才和赋值操作语句等价,如果变量是在外部词法域声明的,那么简短变量声明语句将会在当前词法域重新声明一个新的变量。

第一个程序

在第一个程序中,for循环内部的a := 1是一个新的变量声明,它只在for循环的块作用域内有效。这个新的局部变量a遮蔽(shadows)了外层的全局变量a。因此,最后打印a的值仍是5.

go 复制代码
package main

import "fmt"

func main() {
	a := 5
	fmt.Println(a)
	for i := 1; i < 3; i++ {
		a := 1
		fmt.Println(a)
	}
	fmt.Println(a)
}


开始 声明并初始化a为5 打印a的值 进入for循环 声明新的局部变量a为1 打印局部变量a的值 循环结束 打印全局变量a的值 结束

第二个程序

在这个程序中,for循环内部没有使用:=,这意味着a = 1是在修改外层作用域中的全局变量a。因此,在循环内部打印的是全局变量a的值,即1。由于全局变量a被修改了,所以循环结束后最后打印的也是1。

go 复制代码
package main

import "fmt"

func main() {
	a := 5
	fmt.Println(a)
	for i := 1; i < 3; i++ {
		a = 1
		fmt.Println(a)
	}
	fmt.Println(a)
}


开始 声明并初始化a为5 打印a的值 进入for循环 修改全局变量a为1 打印全局变量a的值 循环结束 打印全局变量a的值 结束

相关推荐
raoxiaoya16 分钟前
golang开发GUI桌面应用(六)- wails,WebView2,postMessage,实现原理
开发语言·后端·golang
爱喝矿泉水的猛男19 分钟前
JavaWeb
java·开发语言·css·vscode·html·javaweb
Theodore_102235 分钟前
6 设计模式原则之单一职责原则
java·算法·设计模式·面试·java-ee·javaee·单一职责原则
江河湖海44 分钟前
用Ruby编写一个自动化测试脚本,验证网站登录功能的正确性。
开发语言·后端·ruby
重生之我是数学王子1 小时前
QT基础 信号与槽 QT5.12.3环境
开发语言·c++·qt
朔北之忘 Clancy1 小时前
2022 年 9 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·算法·青少年编程·题解
API快乐传递者2 小时前
Python爬虫定义入门知识
开发语言·爬虫·python
cwtlw2 小时前
java学习记录10
java·开发语言·学习
THRUSTER111112 小时前
Java学习笔记--可变参数,递归
java·开发语言·笔记·学习·算法·编辑器
დ旧言~2 小时前
【网络】数据链路层协议——以太网,ARP协议
开发语言·网络·网络协议·http·https·php