go语言之变量
1.0、变量初识
变量,其实就香芋给某个值设置一个昵称,此昵称代指当前值。
在Go中变量声明的基本格式为:var 变量名 类型 = 值,例如:
// 声明一个字符串类型的变量name,值为'qzk'
var name string = "qzk"
// 声明一个整型类型的变量 age, 值为18
var age int = 18
1.1. 变量简写
为了能让变量的声明更方便,Go 还提供了一些声明变量的简化方式
省略类型,格式为 var 变量名 = 值
var name = "qzk"
var age = 18
// 再给变量赋值时已知值的类型,所以Go编译器可以自动检测到类型,故可简化编写。
省略var 关键字,格式为:变量名 := 值(推荐这样使用)
name := "qzk"
age := 18
上述的两种简化编写的方式必须是直接赋值操作,即:直接将赋值值给变量,否则无法简化。例如:先声明再赋值时就不能使用简化方式编写
// 先, 声明变量
var name = string
// 给变量赋值
name = 'qzk'
注意:如果变量,只声明不赋值,Go内部其实会给变量默认设置值
// int 默认值为 0
// float 默认值为 0.0
// bool 默认值为 false
// string 默认值为 空字符串
// 指针 默认值为 nil
....
1.2 变量名要求
对于变量名有一下几个要求和建议:
要求:
变量名由 字母、数字、下划线组成,且首个字符不能为数字。
不能使用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
建议:
变量的命名规则遵循驼峰命名规则,即首个单词小写,每个新单词的首字母大写,例如:numShips 和 startDate
见名知意,通过变量名就可以知道变量所代指的值,例如:name、email
1.3 全局和局部变量
根据变量所在位置不同, 变量有全局和局部变量之分
1.3.1 全局变量
package main
import "fmt"
// 声明全局变量
var country string = "中国"
// 亦可使用
// var country = "中国"
// 不可使用
// country := "中国"
func main(){
fmt.Println(country)
country = "China"
fmt.Println(country)
}
特别提示:Go 中的 全局变量比较特殊,
如果全局变量首字母小写,则只能别当前包中的go文件使用,外部无法使用;
如果首字母大写,则任意文件都可以使用全局变量
可简单理解为:首字母大写表示共有, 首字母小写表示私有(当前包的go文件所有)
1.3.2 局部变量
Go中的变量有作用域之分,每个大括号就是一个作用域,每个作用域中都可以定义相关的局部变量。
package main
import (
"fmt"
)
func main(){
// 声明局部变量,再当前函数可用
var name string = "qzk"
fmt.Println(name)
if true {
// 声明局部变量, 再当前if中可用
var age = 18
fmt.Println(age)
}
// 下面的语句就会报错,因为age 再if括号的作用域中
// fmt.Println(age)
}
1.4 因式分解
在定义多个变量时候, 可以用过饮食分解的方式进行简化代码。
package main
import "fmt"
/*
var name = "qzk"
var age = 18
var gender string
*/
// 在全局使用
var (
name1 = "qzk"
age = 18
gender string
)
func main(){
fmt.Println(name1)
fmt.Println(age)
fmt.Println(gender)
// 在局部使用
var (
x1 = 123
x2 = 34
)
fmt.Println(x1)
fmt.Println(x2)
}