GO语言学习四 标识符与作用域

Go语言中,块是指在一对相匹配的花括号内的一系列(可能为空的)语句。
在源代码中除了显式的块,还有隐式的块:

  • 全局块:涵盖了所有Go源码文本
  • 包块:涵盖了一个包的所有Go源码文本
  • 文件块:涵盖了在一个文件内所有Go源码文本
  • 每个for、if、switch语句都视为它自身的隐式块
  • switch、select语句的每个条件都是一个隐式块

块可以嵌套并影响作用域。关于作用域,我们留在后面讲解。

标识符

标识符指的是程序元素的名字。我们在前面接触过的包名、变量名、常量名、函数名、类型名等都属于标识符。
在Go语言中,标识符必须以Unicode字符或下划线开头,后面可以跟随任何数量的Unicode字符、下划线和Unicode数字。以下的标识符都是合法的:

a
_x9
ThisIs红色
αβ

以下是不合法的例子

。a	// 不能以标点符号开头// 不能以Unicode数字开头

预定义标识符

Go语言预定义了以下标识符,为了防止混淆,应该尽量避免重新声明这些标识符:
类型

bool byte complex64 complex128 error float32 float64
int int8 int16 int32 int64 rune string
uint uint8 uint16 uint32 uint64 uintptr

变量

true false iota

零值

nil

函数:

append cap close complex copy delete imag len
make new panic print println real recover

关键字

Go语言定义了25个关键字,它们不能用做标识符

break        default      func         interface    select
case         defer        go           map          struct
chan         else         goto         package      switch
const        fallthrough  if           range        type
continue     for          import       return       var

标识符的作用域

  • 对于预定义标识符,它们的作用域是全局块。
  • 对于不在任何函数或方法内声明的标识符(除了方法),它们的作用域是期所在包的包块;
  • 对于在方法接收者、函数参数、函数返回值声明的标识符,它们的作用域是整个函数体;
  • 对于导入包的包名,它的作用域是导入声明语句所在的文件块;
  • 对于在函数或方法内部声明的标识符,它们的作用域开始于其声明时,结束于包含它的最内层块末尾;

在块A内声明的标识符可以在A的内层块B中被重新声明,被重新声明的标识符作用域遵循上述原则。

需要注意的是,包约定语句中的默认包名不是标识符声明,它的作用是将文件标识为同属一个包,并且在导入声明的时候提供一个默认的包名。

思考

请思考,在下面例子中,程序结束时c的值是什么?

package main

import (
	format "fmt" // 给fmt包设置别名为format
)

func main() {
	var c, f = 1, 1.0

	for c := 0; c <= 300; c += 20 {
		f = float64(c)*9/5 + 32
		format.Println(c, "\t", f)
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值