变量
变量声明
var关键字
1.var关键字声明
基本语法
var 变量名 类型;
概述
指定变量类型,如果没有初始化,则变量默认为零值。
示例
package variable
import "fmt"
/*本文件用于测试常见类型的零值*/
//整数类型
var v1 int
//获得零值
func GetZero(){
fmt.Printf("整数类型的零值为%v\n",v1)
}
在main入口中导入,不要手写导入包,例如
import "go_learn/variable"
因为golang的检测机制,只要某个包被使用就会自动导入,没使用则会把导入删除,所以我们只需要写上
包名.方法()
包名.变量
就会自动导入,如果我们发现导入路径出错再手动更改(常见于使用第三方包有同名方法时)。
package main
import (
"fmt"
"go_learn/variable"
)
//这是入口文件
func main(){
// 这是一段打印
fmt.Print("hello world!!\n")
//测试零值
variable.GetZero()
}
2.var声明并赋值
基本语法
var 变量名 类型 = 值;
注意:如果值与类型不符会报错。
示例
var v2 string = "hello";
3.var声明并类型推导
基本语法
var 变量名 = 值;
编译器根据赋值类型自动推导变量的类型,这适用于很多简易场合。
示例
var v3 = true;
//首次赋值后变量的类型就确定了,例如v3为bool类型
//类型不一样,报错
//v3 = 11;
4.多变量声明
最简单的声明语法
var 变量1,变量2,变量3 类型;
注意:由于变量声明必须要包含类型,所以仅声明不赋值的情况下多变量声明只能声明同类型。
4.1同类型多变量声明并赋值
var 变量1,变量2,变量3 类型 = 值1,值2,值3
示例
var val1,val2,val3 int = 5,6,87
//值为5,6,87
fmt.Printf("值为%d,%d,%d\n",val1,val2,val3)
注意
1.多变量赋值,左侧的所有变量至少有一个是未声明过的,因为变量不能重复声明
2.如果满足条件1,则已声明过的相当于重新赋值,未声明过的相当于声明并赋值
3.按照位置赋值
4.2不同类型多变量声明并赋值
如果想要不同类型的多变量声明就采取赋值来类型推导的方式。
var 变量1,变量2,变量3 = 值1,值2,值3
示例
var val4,val5,val6 = "hello",true,87
//值为hello,true,87
fmt.Printf("值为%v,%v,%d\n",val4,val5,val6)
5.用于全局变量声明
所谓全局变量,指的是在包的顶层,即不从属于任何函数,例如:
package main
//全局变量
var num = 20
func main(){
}
当var用于全局变量声明时还有一种特殊的声明多个全局变量的方式,例如
var (
变量1 类型1
变量2 = 值2
变量3,变量4 类型
)
相当于提取出了公共的var,所以又被称为因式分解赋值。
简易变量声明
不使用关键字,直接使用:=来实现声明并赋值,与var的差别:
1.`:=`只能用于局部变量声明,即必须在函数内
2.`:=`声明的同时赋值,无法指定类型,靠赋值推导
3.`:=`声明的变量必须使用,原因是局部变量必须使用,`var`声明的局部变量也遵守这一条,但是全局变量例外
简易声明
基本语法
变量 := 值
注意:
1.不要赋值号
=混淆2.左侧变量在同作用域内必须未声明
示例
package book
func GetPrice(){
//声明并赋值
price := 25
return price
}
简易声明多个变量
基本语法
变量1,变量2,变量3 := 值1,值2,值3
注意:
左侧的变量至少有一个从未声明
示例
package person
func GetInfo(){
age,name,weight := 18,"baby",120
fmt.Print(age,name,weight)
}
匿名变量
匿名变量就是_,也被称为空标识符。
常用场景
1.右侧返回了多个结果,我们不想接收某个位置的参数。
2.导包时只执行init(),其他不导入。
示例
package person
func GetInfo(){
//不接收第二个值
age,_,weight := 18,"baby",120
fmt.Print(age,name,weight)
}
注意
匿名变量不算未声明变量,所以在如下情形报错。
var age =18
//报错:左侧所有变量都已经声明不能重复声明
_,age := "hello",20