变量
Go语言中的每一个变量都有自己的类型,并且变量必须经过声明才能开始使用。
声明的变量必须使用,否则会报错。这一点与js不相同。
GO语言中变量的声明
Go语言变量名由字母、数字、下划线组成(3种字符),其中首个字符不能为数字。
Go语言中关键字和保留字都不能用作变量名。[重要]
Go语言中的变量需要声明后才能使用,同一作用域内不支持重复声明。
并且Go语言的变量声明后必须使用(这一点和js不相同)。
如何声明变量
var 变量名称 类型
变量声明后没有赋值的话,值为空
package main
// 引入打印的包
import ("fmt")
// 入口函数
func main() {
// 输出语句
var userName string
fmt.Println("userName", userName) // 值是空
}
第一种方式去初始化(定义变量和赋值分为2步)
package main
// 引入打印的包
import ("fmt")
// 入口函数
func main() {
// 第一种方式初始化变量
var userName string
userName ="张三"
fmt.Println(userName)
}
第2种方式定义变量(定义变量和赋值合并成为1步)
package main
// 引入打印的包
import ("fmt")
// 入口函数
func main() {
// 第2种方式初始化变量:定义变量和赋值合并成为1步
var userName string ="张三"
fmt.Println(userName)
}
第3种方式:自动推导类型,不需要你去声明类型
package main
// 引入打印的包
import ("fmt")
// 入口函数
func main() {
// 第3种方式:自动推导类型,不需要你去声明类型
var userName ="张三"
fmt.Println(userName)
}
一次性定义多个变量
// 第一种,这种变量名称1,变量名称2类型是相同的
var变量名称1,变量名称2 类型
// 第二种:变量名称1,变量名称2 类型不相同
var (
变量名称1 类型
变量名称2 类型
)
package main
import ("fmt")
// 入口函数
func main() {
// 第二种:变量名称1,变量名称2 类型不相同
var (
userName string = "张三"
ageNum int =19
)
fmt.Println(userName, ageNum)
}
输出 张三 19
go语言可以自动推导数据类型,你声明变量且赋值的时,可以不用写数据类型
比如上面的例子,你声明变量的时候,有赋值。
因此。可以不用去写变量类型。
它回去自动推导
import ("fmt")
// 入口函数
func main() {
// 声明变量且赋值的时,可以不用写数据类型
var (
userName = "张三"
ageNum =19
)
fmt.Println(userName, ageNum)
}
短变量声明法
在函数内部,可以使用更简略的 := 方式声明并初始化变量。
注意:短变量只能用于声明局部变量,不能用于全局变量的声明。
变量 := 赋值
注意 := 左右两侧有空格
package main
import ("fmt")
// 入口函数
func main() {
// 短变量声明法
userName := "张三" // 等价与 var userName = "张三"
fmt.Println(userName)
}
短变量一次声明多个变量
package main
import ("fmt")
// 入口函数
func main() {
// 声明变量且赋值的时,可以不用写数据类型
userName,ageNum,userAddress:= "张三", 18, "在xx城市"
fmt.Println(userName, ageNum, userAddress)
}
全局变量、短变量只能声明局部变量
package main
import ("fmt")
// 声明了一个全局变量且有赋值。不用声明类型
var g="全局变量"
// 入口函数
func main() {
// 声明变量且赋值的时,可以不用写数据类型
userName,ageNum,userAddress:= "张三", 18, "在xx城市"
fmt.Println("短变量只能声明局部变量",userName, ageNum, userAddress)
fmt.Println(g)
}
匿名变量
匿名变量在使用多重赋值时,
如果想要忽略某个值,可以使用匿名变量(anonymous variable)
匿名变量用一个下划线_表示
匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明
也就是说:下划线_不存在重复声明
package main
import ("fmt")
func backInfo()(string, int){
return "zhangsan", 100
}
// 入口函数
func main() {
//获取全部变量
var userName,age = backInfo()
fmt.Println(userName, age)
// 假设现在我们不需要返回值 age,使用匿名变量
var name, _ =backInfo()
fmt.Println(name)
// 匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明
var _, ccc =backInfo()
fmt.Println(ccc)
}