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

相关推荐
矛取矛求2 分钟前
QT的前景与互联网岗位发展
开发语言·qt
Leventure_轩先生2 分钟前
[WASAPI]从Qt MultipleMedia来看WASAPI
开发语言·qt
向宇it16 分钟前
【从零开始入门unity游戏开发之——unity篇01】unity6基础入门开篇——游戏引擎是什么、主流的游戏引擎、为什么选择Unity
开发语言·unity·c#·游戏引擎
是娜个二叉树!33 分钟前
图像处理基础 | 格式转换.rgb转.jpg 灰度图 python
开发语言·python
Schwertlilien37 分钟前
图像处理-Ch5-图像复原与重建
c语言·开发语言·机器学习
liuyunshengsir40 分钟前
Squid代理服务器的安装使用
开发语言·php
只做开心事1 小时前
C++之红黑树模拟实现
开发语言·c++
很楠不爱1 小时前
项目实战——高并发内存池
开发语言·项目实战
程序员buddha2 小时前
C语言从入门到放弃教程
c语言·开发语言
程序员老冯头2 小时前
第十五章 C++ 数组
开发语言·c++·算法