当前位置: 首页 > article >正文

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

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

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

第一个程序

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

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。

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

http://www.kler.cn/a/402113.html

相关文章:

  • Leetcode 有效的数独
  • Linux-Apache
  • iceberg小文件合并策略
  • ssh无法连接Ubuntu
  • 3D Streaming 在线互动展示系统:NVIDIA RTX 4090 加速实时渲染行业数字化转型
  • C#编写的日志记录组件 - 开源研究系列文章
  • 【Electron】Electron Forge如何支持Element plus?
  • 视频里的音频怎么提取出来成单独文件?音频提取照着这些方法做
  • 论文阅读:Mixture-of-Agents Enhances Large Language Model Capabilities
  • MATLAB和Python发射光谱
  • 【Linux】深入理解GCC/G++编译流程及库文件管理
  • C++中的std::tuple和std::pair
  • C++---类型转换
  • 5G CPE:为什么活动会场与商铺的网络成为最新选择
  • lua调用C语言函数,在函数中进行类型检查
  • CPU服务器是指什么?
  • 如何解决Ubuntu 20.04中Vim编辑器在按下Ctrl+S时暂停响应的问题
  • 详细分析ipvsadm负载均衡的命令
  • 【ShardingSphere 中间件】ShardingSphere 实现分库分表的详细案例
  • AI工业大模型报告:体系架构、关键技术与典型应用
  • 【c++笔试强训】(第十四篇)
  • 搜维尔科技:Xsens随时随地捕捉,在任何环境下实时录制或捕捉
  • CTFHub每日练习
  • OpenLayers教程12_WebGL自定义着色器:实现高级渲染效果
  • 0基础学java之Day20
  • [数组二分查找] 0209. 长度最小的子数组