代码块的作用域问题

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
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值