声明变量
- var声明
var 变量名称 类型
var username string
fmt.Println(username)
//打印为空
- Go中的变量名由字母、数字、下划线构成(可以是汉字),且首字母不能是数字;Go中的关键字和保留字都不能用作变量名。
- 在同一个作用域中,变量不能重复声明
- 定义及初始化
先定义,再初始化
var username string
username = "张三"
定义时初始化
var username string = "张三"
这里提示,没必要指定
张三
为string
类型,go可以通过类型推到推断出来。
第三种初始化变量方式,和JavaScript的非严格模式一致(推荐)
var username = "张三"
fmt.Println(username)
- 一次定义多个变量
var 变量名称,变量名称 类型
var a1, a2 string
a1 = "aabb"
a2 = "ccdd"
var (变量名称 类型 变量名称 类型)
var (
username string
age int
sex string
)
username = "张三"
age = 18
sex = "男"
- 上面的简写
var (
username string = "张三"
age int = 18
)
通常在这里,编译器还是会给出提示,建议省略类型
- 上面的简写的简写
var(
username = "张三"
age = 18
)
短变量声明法
在函数内部,可以使用更简略的
:=
方式声明并初始化变量
注意:短变量只能用于声明局部变量,不能用于全局变量的声明
username := "张三"
fmt.Println(username)
fmt.Printf("username类型:%T", username)
//string
使用短变量声明多个变量并初始化
a, b, c := 101 ,102, "张三"
fmt.Println(a, b, c)
匿名变量
在使用多重赋值时,如果想忽略某个值,可以使用匿名变量。匿名变量用一个下划线_表示。
func getUserinfo()(string, int){
return "zhangsan", 10
}
var username, age = getUserinfo()
fmt.Println(username, age)
当我们想忽略某个值的时候,通常想这样写
var username = getuserinfo()
fmt.Println(username)
但是编译器告诉我们,这里返回了两个值,而你只用了一个变量来接收。所以,建议这样写
var username, _ = getUserinfo()
fmt.Println(username)
//张三
var _, age = getUserinfo()
fmt.Println(age)
//10
匿名变量不占用命名控件,不会分配内存,所以匿名变量之间不存在重复声明。
常量(与C一致)
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的值。常量和变量声明类似,只是把var换成了const,且在定义时必须赋值。
- 使用const定义常量
const pi = 3.141592653589793238462643383279502884197169399375105820974944592307816
const e = 2.7128
声明了pi和e这两个常量之后,在整个程序运行期间,它们的值都不能再发生变化了
const pi string
pi = "xxxx"
fmt.Println(pi)
//报错,在定义的时候没有赋值
- 多个常量可以一起声明
const (
A = "A"
B = "B"
)
在声明常量的时候,只给第一个赋值了,而其他的没有赋值,则其他的和第一个的数值相同
const (
n1 = 100
n2
n3
)
fmt.Println(n1, n2, n3)
//100 100 100
const结合iota使用
iota是go的常量计数器,只能在常量的表达式中使用
iota在const关键字出现时被重置为0(const内部的第一行之前),const中每新增一行变量声明,iota计数一次(iota可理解为const语句块中的行索引、类似于浏览器垃圾回收机制的标记计数法)
const a = iota //a = 0
const (
b = iota //b = 0
c //这里的c是累加,c = 1
)
- iota使用
_
跳过某些值
const (
n1 = iota // 0
n2 //1
_
n3 //3
)
- iota声明中间插队
const (
n1 = iota //0
n2 = 100 //100
n3 = iota //2
n4 //3
)
fmt.Println(n1, n2, n3, n4)
//0 100 2 3
- 两个iota可以定义在一行
const (
n1, n2 = iota + 1, iota + 2// 1 2
n3, n4 //2 3
n5, n6 //3 4
)
const (
num1, num2 := 20, 30 // 20,30
)
网友评论