Go语言基础-变量和常量

316 阅读3分钟

1. 变量基础

1.1 变量类型

Go语言的基本类型有:

  • bool
  • string
  • int、int8、int16、int32、int64
  • uint、uint8、uint16、uint32、uint64、uintptr
  • byte // uint8 的别名
  • rune // int32 的别名 代表一个 Unicode 码
  • float32、float64
  • complex64、complex128

1.2 变量声明

  1. 标准格式:

var 变量名 变量类型 变量声明以关键字 var 开头,后置变量类型,行尾无须分号

  1. 批量格式
var (
    a int
    b string
    c []float32
    d func() bool
    e struct {
        x int
    }
)

使用关键字 var 和括号,可以将一组变量定义放在一起

  1. 简短格式 除 var 关键字外,还可使用更加简短的变量定义和初始化语法。

变量名 := 表达式 需要注意的是,简短模式有以下限制:

  • 定义变量,同时显式初始化。
  • 不能提供数据类型。
  • 只能用在函数内部。 和 var 形式声明语句一样,简短变量声明语句也可以用来声明和初始化一组变量:
func main() {
   x:=100
   a,s:=1, "abc"
}

1.3 变量初始化

声明变量时,自动对变量对应的内存区域进行初始化操作。每个变量会初始化其类型的默认值,例如:

  • 整型和浮点型变量的默认值为 0 和 0.0。
  • 字符串变量的默认值为空字符串。
  • 布尔型变量默认为 bool。
  • 切片、函数、指针变量的默认为 nil。

1.变量初始化的标准格式

var 变量名 类型 = 表达式
var hp int = 100
hp 为变量名,类型为 int,hp 的初始值为 100

2.类型推导
有时候我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完成初始化

var hp = 100
右值为整型,hp变量的类型为int

3.短变量声明并初始化
var 的变量声明还有一种更为精简的写法:

hp := 100 这是Go语言的推导声明写法,编译器会自动根据右值类型推断出左值的对应类型。
注意:由于使用了 :=,而不是赋值的 =,因此推导声明写法的左值变量必须是没有定义过的变量

4.匿名变量
在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量。 匿名变量用一个下划线_表示,例如:

func GetValue() (int, int) {
	return 10, 20
}
func main() {
	x, _ := GetValue()
	_, y := GetValue()
}

2. 常量基础

Go语言中的常量使用关键字 const 定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。由于编译时的限制,定义常量的表达式必须为能被编译器求值的常量表达式
常量的定义格式和变量的声明语法类似:
const name [type] = value

  • 显式类型定义: const b string = "abc"
  • 隐式类型定义: const b = "abc" 批量声明多个常量:
const (
    e  = 2.7182818
    pi = 3.1415926
)

const同时声明多个常量时,如果省略了值则表示和上面一行的值相同

const (
    a = 1
    b
    c = 2
    d
)
fmt.Println(a, b, c, d) // "1 1 2 2"

3. iota 常量生成器

常量声明可以使用 iota 常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。在一个 const 声明语句中,在第一个声明的常量所在的行,iota 将会被置为 0,然后在每一个有常量声明的行加一

const (
		n1 = iota //0
		n2        //1
		n3        //2
		n4        //3
	)