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
	)