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

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

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

变量声明

变量是某个值的存储位置,而变量声明则创建了变量并将一个标识符(变量名)绑定到这个变量。
让我们先来看一段程序:

package main 
import (
	format \"fmt\"		// 给fmt包设置别名为format
)
/*将0到100摄氏度每隔10度转换成华氏度并打印出来
  C=5/9*(F-32)
*/
func main() {
	var c,f int				//c和f是整型,默认初始化为0
	var lower, upper = 0, 100	// lower和upper分别初始化为0和100,都推导为整型
	var step int = 10			// step是整型,初始化为10
	for c = lower; c <= upper; c+=step {
		f = c*9/5+32
		format.Println(c,\"\\t\",f)
	}
}

Go语言中变量需要先声明再使用。变量声明的语法如下:

var 变量名{, 变量名} 类型名

var 变量名{, 变量名} [类型名]= 初始值{,初始值}

在变量声明中如果指定了类型名,则变量名列表中的所有变量都是所指定的类型,初始值也必须是所指定类型的值;如果没有指定类型名,则变量名列表中的各变量类型分别由初始值列表类型推导而来;如果指定了初始值列表,则初始值列表数量必须与变量名列表数量一致。
在同一级块内,变量不能被用以上语法重新声明。

短式变量声明

在函数体的内部(只能在函数体内部)还可以使用短式变量声明,语法如下:

变量名{, 变量名} :=初始值{,初始值}

变量名列表中的各变量类型分别由初始值列表类型推导而来;初始值列表数量必须与变量名列表数量一致。
它相当相于常规变量声明:

var 变量名{, 变量名} = 初始值{,初始值}

在同一级块中,如果已经声明过的变量与至少一个新变量一同出现在短式变量声明的变量列表中,则被声明过的变量以可被重新声明,但不能改变类型:

var i int =0
i,j := 1,1.0	// i的新值为1,也是整型,声明了新变量j,值为1.0是个浮点型
i,k := 1.0,1	// 编译错误,1.0是浮点型,i的类型是整型,不能重新声明为浮点型

请思考,在下面例子中,程序结束时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)
	}
}

常量声明

在程序中不希望被改变的值可以声明为常量,常量声明的语法我们通过下以的示例来学习:

	const a, b int = 0, 1 //a和b是int型常量,值分别为0和1
	const c, d = \"test\", \"string\"	//c和d是字符串型常量,值分别是test和string
	const (
		i, j float32 = 1.1, 2.1		//i和j是float32型常量,值分别是1.1和2.1
		m, n = iota, iota				//m和n是整型常量,值分别是iota的初始值1和1
		o, p							//o和p以上一行为模板,是整型常量,值分别是iota自增值2和2
		q, r = 1, 1					//q和r是整型常量,值分别是1和1,(iota自增到3)
		s, t							//s和t以上一行为模板,是整型常量,值分别是1和1(iota自增到4)
		u, v = iota, iota 				//u和v是整型常量,值分别是iota的自增值5和5
		k, l							//k和l以上一行为模板,是整型常量值分别是iota的自增值6和6
		w, x = \"test2\", \"string2\"		//w和x是字符串常量,值是test2和string2
		y, z							//y和z以上一行为模板,是字符串常量,值是test2和string2
		e								// 错误,列表个数不同,不能以上一行为模板,应该要赋值
	)

上面的示例展示了常量的声明方法,同时也展示了go语言预定义常量标识符iota的使用方法。

收藏 打印