什么是变量?
一种抽象,计算机用来保存现实数据的容器,通过这个变量抽象可以写入现实数据到计算机中,并且可以读取变量取到保存到计算机中的现实数字化数据
Go-变量定义
关键字 var
关键符号 :=
import "fmt"
var country = "China"
func main() {
var name = "beimenchuixue"
var (
age = 18
school = "huGong"
)
work := "student"
fmt.Println(name, age, school, work)
}
观察发现,有以下特性
1. 定义变量类型的时候,大多数情况下不要写变量类型,Go解释器会自动推断,特殊情况还是要加上变量类型
2. 每句语句后面都没有分号,但是解释器在编译的时候会自动加上
3. 定义包变量的时候只能使用 var方式定义,不能使用 := 方式
4. := 解释器会解释为两步,先var声明类型,然后再赋值
5. 包变量可以不使用不报错,函数变量必须使用,但我们可以通过 _ 来忽略某个不想要的变量
6. 定义多个变量的时候通过 var() 方式
7. Go定义变量时候,变量名在前,变量类型在后,这和其他语言变量定义风格相反
Go-变量类型 8bit=1byte
有符号整形 int8,16,32,64
无符号整形 uint8,16,32,64
浮点数 float32,64
布尔型 bool
复数 complex64,128
字符串 string 双引号
单个字节字符 byte 单引号
单个字符 rune 单引号
错误类型 error
Go-命名规范
1. 遵循C语言命名规范,不能以数字开头,以大小写字母、下划线、数字组成
2. 不能是关键字,不推荐使用内置函数名
3. 首字母大写表示包外可以访问,首字母小写表示包外不可访问
4. 以首字母大写区分不同单词
5. 变量名、函数名、结构体名、接口名都遵守以上规范
Go变声明时候会给初始值
1. 数字类型 int float byte rune 为 0
2. string 为空字符串
3. complex 为 (0+0i)
4. bool类型问 false
5. error类型为 <nil>
package main import "fmt" func main() { var a int8 var b int64 var c float32 var d float64 var e bool var f complex64 var g string var h byte var j rune var k error fmt.Println(a, b, c, d, e, f, g, h, j, k) }
以上这些基础数据类型,只能满足存放一个数据的需求
Go变量作用域(生命范围)
1. 定义在和 package import关键字同级,为包变量,作用于包全局,包内可以访问并可以直接修改
package main import "fmt" var country = "China" func PrintCountry() { fmt.Println(country) country = "Russia" } func main() { PrintCountry() fmt.Println(country) country = "American" fmt.Println(country) }
2. 定义在函数内,为函数变量,作用于这个函数,函数内可以访问,函数外不可访问并且失效
package main import "fmt" func PrintCountry() { var country = "China" fmt.Println(country) } func main() { PrintCountry() }
3. 定义在循环分支中,为循环分支变量,只能循环分支中可以访问,出循环分支外不可访问并且失效
package main import "fmt" func Count() { start := 0 for i := 0; i<=100 ; i ++ { start = i fmt.Println(start) } fmt.Println(start) //fmt.Println(i) } func main() { Count() }
4. 形式上看,每对 {}形成一个作用域,都可以很轻松修改掉能访问到的外部作用域变量并做出修改,但是外部作用域不能访问内部作用域变量