欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

代码块的作用域问题

程序员文章站 2022-03-18 10:02:12
package mainimport "fmt"func main() {{v := 1{v = 2fmt.Println(v) // 2}fmt.Println(v) // 2}//fmt.Println(v) // undefined: v//作用域与标识符的定义紧密相关(更准确的说是与标识符被声明的地方)a := 10{a := 3fmt.Println(a) // 3}fmt.Prin...
package main

import "fmt"

func main() {
	{
		v := 1
		{
			v = 2
			fmt.Println(v)   // 2
		}
		fmt.Println(v)     // 2
	}
	//fmt.Println(v)   // undefined: v


	//作用域与标识符的定义紧密相关(更准确的说是与标识符被声明的地方)
	a := 10
	{
		a := 3
		fmt.Println(a)   // 3
	}
	fmt.Println(a)    // 10



	// 变量标识符的作用域能到达最内层的代码块(不论是隐含的或者是显式用大括号包围起来的):
	{
		b := 4
		{
			fmt.Println(b)
			{
				//b = 5   // 输出为: 4 5 5
				b := 5    // 输出为: 4 5 4
				fmt.Println(b)
			}
		}
		fmt.Println(b)
	}


	// 遮蔽(Shadowing)
	// 在同一个代码块中,一个标识符不能被声明两次。
	// 但是在内部的代码块中可以重新声明外部被声明了的标识符 (代码块可以像洋葱那样一层层嵌套的)。
	// 如果在内层重新声明了标识符,那么在代码中起作用的声明是离代码最近的最里层的那个声明:
	d := "outer"
	fmt.Println(d)
	{
		d := "inner"
		fmt.Println(d)
		{
			fmt.Println(d)
		}
	}
	{
		fmt.Println(d)
	}
	fmt.Println(d)
	// 输出:
	//outer
	//inner
	//inner
	//outer
	//outer
}

本文地址:https://blog.csdn.net/ayqy42602/article/details/108582481

相关标签: Go-Code