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的值 结束

相关推荐
qqxhb30 分钟前
零基础学Java——第十一章:实战项目 - 微服务入门
java·开发语言·spring cloud·微服务
码农飞哥1 小时前
互联网大厂Java求职面试实战:Spring Boot到微服务的技术问答解析
java·spring boot·缓存·面试·消息队列·技术栈·microservices
CodeCraft Studio1 小时前
国产化Word处理控件Spire.Doc教程:通过C# 删除 Word 文档中的超链接
开发语言·c#·word
martian6651 小时前
麒麟系统下Tomcat部署Java Web程序(WAR包)及全链路问题排查指南
开发语言·tomcat·系统安全
ai.Neo1 小时前
牛客网NC22012:判断闰年问题详解
开发语言·c++·算法
好吃的肘子1 小时前
ElasticSearch进阶
大数据·开发语言·分布式·算法·elasticsearch·kafka·jenkins
NaclarbCSDN1 小时前
Java集合框架
java·开发语言·前端
xiaohanbao091 小时前
day26 Python 自定义函数
开发语言·python·学习·机器学习·信息可视化·numpy
jie188945758661 小时前
c++,windows,多线程编程详细介绍
开发语言·c++
破晓的历程1 小时前
Qt file文件操作详解
开发语言·qt