前言
昨天学习了GO编程中的数据类型和关键字,今日学习定义变量以及定义特殊的变量
一、变量
声明变量用var,注意变量名不能以数字开头,声明形式有:var 标识符 类型
,var 标识符1,标识符2 类型
声明变量有如下方式:
- 指定变量类型时若没给初始则会采用默认的,比如bool类型的默认为false,数值类型默认0
- ‘:=’左侧必须为声明的新变量,并且编译器会自动根据右边的初值来推断变量类型
- 多个变量声明
var 变量1, 变量2, 变量3 = 变量1的初值, 变量2的初值, 变量3的初值
或者var ( Var_name1 v_type1 Var_name v_type2)
该类型常用于全局变量声明
注:GO编程在使用变量前必须先声明
二、常量
constant的缩写const为定义常量的关键字,该常量可以是bool、数值(int,float,complex),字符串
常用格式为:const 变量 [type] = value
注意:iota,特殊常量,可认为是可以被编译器修改的常量。在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;
package main
import "fmt"
const (
i=1<<iota //运行到这一行时iota为0,即1左移0为还是为1
j=3<<iota //运行到这一行是iota为1,3左移1为相当于乘2即此处j=6
k=3<<iota //运行到此处iota=2,3*2^2
l=3<<iota //运行到此处iota=3,3*2^3
//比较有意思的是,此处可以写为如下形式,依然与上两行代码等价
k //编译器会自动根据j的赋值形式给k和l赋值,但是要注意iota自增
l
)
func main() {
fmt.Println("i=",i)
fmt.Println("j=",j)
fmt.Println("k=",k)
fmt.Println("l=",l)
}
三、枚举
GO语言中没有枚举类型,通常使用const定义枚举
eg://自增枚举
const (
a = iota //0
c //1
d //2
)
const (
e, f = iota, iota //e=0, f=0
g = iota //g=1
)
eg://自增时中断需要重新使用iota显式恢复
const (
a = iota //0
b //1
c = 100 //100
d //100
e = iota //4 由于c赋值100,致使中断,所以重新给赋iota
)