Golang 变量( 数据类型 )与常量
变量,是计算机内存中存储数据的标识符,根据变量名,可以获取到内存中存储的数据
也就是说,每个变量仅仅是一个用于保存值的占位符,根据变量可以方便的获取或者修改内存中的数据
变量
变量声明:Golang 中,每个变量都有自己对应的数据类型,其规则如下:
- 变量需要声明后,才能使用
// 基本语法:var 变量名 变量类型 var name string var age int // 批量声明:每声明一个变量就需要写一个 var 关键字,比较繁琐,So,Golang 中支持批量上面 var ( sex string weight float64 )
- 同一作用域内,不支持重复声明
- 变量声明后,必须使用
变量初始化:变量声明时,会自动对变量对应的内存区域,进行初始化操作
- 默认值:每个变量声明时,会被初始化成其对应类型的默认值
// 整型和浮点型变量,默认值为:0 // 布尔型变量,默认值为:false // 字符串变量,默认值为:空字符串
- 赋值操作:我们也可以为其指定初始值
// 基本语法:var 变量名 变量类型 = 表达式 var name string = "webpiece" var age int = 18 // 批量初始化 var name1, name2 string = "小明", "小红"
- 类型推导:有时候,我们会将变量类型省略,这样,编译器会根据等号右边的值自动推导完成初始化
var name,age = "webpiece",18
- 短变量声明:函数内部,可以使用更简略的方式( := )来完成初始化
// 函数外的每个语句,都必须以关键字开始( var、const、func 等 ) var m = 100 func main() { // := 不能使用在函数外 n := 10 m := 200 }
- 匿名变量:进行多重赋值时,如果想要忽略某个值,可以使用匿名变量( 用下划线 _ 表示 )
func foo() (int, string) { return 10, "Q1mi" } // 匿名变量不占用命名空间,不会分配内存,所以,匿名变量之间不存在重复声明;多用于占位,表示忽略值 func main() { x, _ := foo() _, y := foo() fmt.Println("x=", x) fmt.Println("y=", y) }
常量
相对于变量,常量是恒定不变的值,常用于定义程序运行期间不会改变的那些值。
- 常量的声明与赋值:与变量类似,只是 var 换成了 const,需说明的是,常量在定义的时候,必须赋值。
// 声明了 pi 和 e 后,这两个常量,在整个程序运行期间,它们的值都不能再发生变化了 const pi = 3.1415 const e = 2.7182 // 多个常量,也可以一起声明 const ( pi1 = 3.14 e1 = 2.71 ) // 同时声明多个常量时,如果省略了值,则表示和上面一行的值相同 const ( n1 = 10 n2 = 20 n3 // 20 )
- iota:Go 语言中的常量计数器,只能在常量的表达式中使用。
- iota,会在 const 关键字出现的时候,被重置为 0
- const 中每新增一行常量声明,会使 iota 计数一次( iota 可以理解为:const 语句块中的行索引 )
// 使用 iota 能简化定义,在定义枚举时很有用 const ( a1 = iota // 0 a2 // 1 a3 // 2 ) // 使用 _ 跳过某些值 const ( b1 = iota // 0 _ b3 // 2 ) // iota 声明中间插队 const ( c1 = iota // 0 c2 = 100 // 100 c3 // 100,如果不赋值,则等于上一行的值 c4 = iota // 3 ) // 多个 iota 定义在一行 const ( a, b = iota + 1, iota + 2 // 1,2 c, d // 2,3 e, f // 3,4 )