1. 变量定义
- Go 语言是静态强类型语言,变量(variable)有明确的类型,编译器也会检查变量类型的正确性。从计算机系统的角度,变量就是一段或者多段内存,用于存储数据。
1.1 标准格式
var 变量名 变量类型
- 例如:var studentNum int
- 变量的命名规则可以遵循驼峰命名法,首个英文单词小写,后面每个新单词的首字母大写
- 此处变量名报错是因为 go 语言严格的要求:定义了的变量就一定要使用到,不可以只定义变量却没有使用,这个规则在真正项目实战中会避免定义很多无用的变量,这些无用变量很多时候还需要花费时间和精力去维护。
- 变量的命名规则可以遵循驼峰命名法,首个英文单词小写,后面每个新单词的首字母大写
- 变量定义之后会有合理的初始值,可以打印查看
- 此处有两个变量,但是控制台只打印了一个,因为 string 字符串默认初始值为空,如果需要打印空字符串,可以使用 printf
- 此处有两个变量,但是控制台只打印了一个,因为 string 字符串默认初始值为空,如果需要打印空字符串,可以使用 printf
1.2 变量赋初值
- 定义变量时可以直接给变量赋一个初值
- 也可以在一行同时定义多个变量
1.3 省略类型
- 编译器会自动通过后面的赋值推断变量的类型,所以在定义变量时可以省略变量类型
- 这个在早期的 C 和 C++ 是不能够自动判断的,后来的 C++ 通过关键字的优化也可以实现自动判断变量类型
- 定义变量时一行甚至可以是不同的类型
1.4 其他形式
1.4.1 函数内
- 函数中首次定义变量时可以通过省略 var ,使用 := 的方式
- := 的效果和 var 是一样的,代表定义一个变量,定义之后还可以对其进行赋值;但之后的赋值就不可以再用 := 的方式,比如修改变量 teacherNum 的值为 1 ,就会提示报错
- 如果想要修改已经定义好的变量,只能通过 = 来进行更改
- 但是首次定义变量时如果直接使用 = 也会提示编译错误,会自动判断这些变量并没有被定义
1.4.2 函数外
- 在函数外一样可以定义变量
- 在函数外定义变量不能使用 := 只能使用 var
- 每行都通过 var 定义比较麻烦,可以通过 var() 集中定义变量
2. 变量交换
例如:a = 1,b = 2;进行交换之后,a = 2,b = 1
2.1 通过中间变量实现
2.2 省略中间变量实现
2.3 直接交换[最方便快捷]
3. 匿名变量(空白标识符"_")
- 在 多重赋值 时,如果不需要在左侧接收对应变量的值,可以使用匿名变量,可以使用 "_" 来代替
- 匿名变量不会占用命名空间,也不会分配系统内存。匿名变量可以重复声明使用。但不可以使用这个标识符作为变量对其它变量进行赋值或运算。
- 匿名变量不可以单独定义。
4. 作用域
变量的作用域 - 就是变量的有效范围,一个变量(常量、类型或者函数)在程序中都有一定的作用范围,这个范围被称之为 作用域。
- 由于 Go 语言会在每次编译时检查每个变量都是否被使用,一旦存在未使用的变量,就会报编译错误,所以了解变量的作用域对学习 Go 语言来说还是比较重要的。
- 根据变量定义的位置不同,可以分为三种类型
- 局部变量 - 定义在函数内的变量
- 全局变量 - 定义在函数外的变量
- 形式参数 - 函数定义中的变量
4.1 局部变量
- 在函数体内声明的变量,作用域 只在函数体内 。
4.2 全局变量
- 全局变量只需要在一个 源文件 中定义,就可以在所有源文件中使用。
- 全局变量的声明 必须以 var 关键字开头的方式进行,如果想要在外部包中使用,那么对应全局变量的 首字母必须大写。
Go 语言的程序中,全局变量与局部变量的名称可以重复,但在函数体内的局部变量优先级会高于全局变量
4.3 形式参数(形参)
- 定义函数时,函数后面括号中的变量就是 形式参数 。
- 形式参数仅在函数被调用时生效。
- 形式参数会作为 函数的局部变量 来使用