3.6.变量的作用域

  • 因为个人的原因,好长时间没有更新了。这里将自己学习Go及其区块链的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。

  • 声明语句的作用域是指源代码中可以有效使用这个名字的范围
    • 作用域是一个源代码的文本区域,是个语法概念,属于编译期
    • 生命期是一块内存被占用的时段,是个内存概念,属于运行期
  • 作用域从大到小依次是:
    • 全局域:内置类型、函数和常量,可在任意位置访问
    • 包域:包级声明,可在同一个包的任何源文件中访问
    • 文件域:被导入的包,仅在导入该包的源文件中访问
    • 函数域:函数中声明,哪个函数声明哪个函数中访问
    • 块域:函数内被花括号括起来的语句块,仅块内访问

 

  • 控制流标号都是函数级作用域
  • 不同作用域可包含同名标识符,内层作用域隐藏外层作用域
  • 内层作用域可访问外层作用域,外层作用域不可访问内层作用域
  • 并非所有作用域都显式地与被花括号包围的语句相对应,比如:
    • 隐式的for循环作用域就比显式的循环体作用域要大
      • for i := 0; i < 10; i++ { 循环体 }
      • for i, v := range a { 循环体 }
    • if、else if和switch语句也会在条件部分创建隐式作用域
      • if a := foo(); a < 0 { if块 }
// 词法作用域
// 最外层大括号   \       / 所有块都能访问在当前块中声明的变量
// 之外及每对大   | 块 |   内部块可以访问在外部块中声明的变量
// 括号之内为块 /      \   外部块不能访问在内部块中声明的变量 
package main
import "fmt"
var s = "Hello World!"
func main() {
    fmt.Printf("Printing 's' variable from outer block: %v\n", s)
    b := true
    if b {
        fmt.Printf("Printing 'b' variable from outer block: %v\n", b)
        i := 42
        if i == 42 {
            fmt.Printf("Printing 'i' variable from outer block: %v\n", i)
        }
    }
}
// 打印输出:
Printing 's' variable from outer block: Hello World!
Printing 'b' variable from outer block: true
Printing 'i' variable from outer block: 42 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值