• Go从入门到精通——变量、函数等标识符声明的作用范围


    变量、函数等标识符声明的作用范围

      在代码中声明的常量、变量、自定义数据类型、函数等标识符都有一定的作用范围,也就是说这些标识符只能在一定范围内使用,超出范围后使用会出现错误。

      上述代码中,我们本希望最后一条 fmt.Printf("b=%v ",b) 语句输出 b 的值为15,但实际上这段代码编译时候会报错。

      这是因为变量 b 是在条件判断语句的嵌套代码中定义的,因此它的有效范围也从变量声明开始到代码块结束为止。在该代码块之后不可以使用该变量。

      常量、变量、类型、函数名、自定义数据结构类型名等标识符的有效范围都可以简单地归纳如下:

    • 标识符有效范围的起始点在其声明之后,也就是 "先声明再使用";因此,下面的代码是错误的,因为在变量声明之前使用了变量

    a = 1

    var a int

    • 标识符有效范围的结束点在其声明后最近的代码块末尾,即到最近的右花括号为止。
    • 同一级别的代码块内不可以重复定义一个标识符。
    var a int
    a := 1
    

      上面的代码会导致编译错误,因为 a:=1 也是声明变量的另一种方式,相同于在同一个代码块里声明了两次,这是不允许的。

    • 标识符后如果有新开始的嵌套代码块(或者可以说是低一级的代码块),则该标识符在该代码块中仍然有效;但如果该代码块中再次声明了该标识符,则会被视为一个新的标识符,并替代原标识符,但仅限于在这个代码块内有效。

     

      为何 3 次输出变量 b 的值会不尽相同呢?

      因为在主函数 main 中声明变量 b 之后,第一次输出变量 b 的值是在其后的第一个判断条件嵌套代码中,此时变量 b 在此范围内是有效的,因此运算得到的 b 的值是15,第二次输出变量 b 是在第二个条件判断嵌套代码中,但这次在输出之前用 短声明新声明了一个同名变量 b,因此此时该嵌套代码块中输出的 b 与之前 main 函数声明的变量 b 已经不同同一个变量了,所以输出了新变量的值 30,第三次输出时,因为已经出了第二个嵌套代码块,此时,新定义变量b已经失效,而旧的变量b仍然有效,所以在此输出了15这个值。

    • 如果标识符不在任何代码块内(成对的花括号内),则从声明开始一直有效。
    package main
    

    import (
    "fmt"
    )

    const pi = 3.14

    func perimeter(r float64) float64 {
    return 2 * pi * r
    }

    func main() {
    r1 := 13.8
    fmt.Printf("圆的周长=%v, 面积=%v ", perimeter(r1), pir1r1)
    }

    • 如果定义的全局范围的标识符不是以大写字母开头的,则最多只在代码所在的本地包内有效,如果是以大写字母开头的,则可以被其他包访问,称作 "被导出的" 标识符。

      需要注意的是,全局变量在定义的时候,不能使用短声明的方式(即用 ":=" 声明并赋值的方式),只能用 var 关键字来声明。

  • 相关阅读:
    WPF 关于拖拽打开文件的注意事项
    asp.net core 3.1中对Mongodb BsonDocument的序列化和反序列化支持
    用百度webuploader分片上传大文件
    多线程学习笔记
    web.config数据库连接字符串加密
    Visual Studio 2010 常用快捷方式
    Team Foundation Server 2013 日常使用使用手册(四)分支与合并
    Team Foundation Server 2013 日常使用使用手册(三)上传新工程、创建任务、创建bug、设置预警
    Team Foundation Server 2013 日常使用使用手册(二)修改、签入、撤销、回滚、对比代码变更
    Team Foundation Server 2013 日常使用使用手册(一)-本地连接TFS、查看任务
  • 原文地址:https://www.cnblogs.com/zuoyang/p/15219176.html
Copyright © 2020-2023  润新知