总结

  1. 变量必须声明后才可以使用,同一个作用域不支持重复声明,声明后必须使用
  2. 每一个变量被声明的时候,都会对对应的内存区域进行初始化,变量会被初始化成对应类型的默认值
  3. 匿名变量不可用户函数外
  4. 常量定义后,不可更改

变量

变量的声明

1.标准声明

  1. var 变量名 变量类型
  2. var name string
  3. var age int
  4. var isOk bool

2.批量声明

  1. var (
  2. a string
  3. b int
  4. c bool
  5. d float32
  6. )

3.类型推导

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

  1. var name = "pprof.cn"
  2. var sex = 1
  3. var name, sex = "pprof.cn", 1

4.短变量声明

  1. n := 10

5.匿名变量

如果多重赋值,想要忽略某一个值,可以使用_下划线表示,匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明
匿名变量不可用在函数外

  1. func foo() (int, string) {
  2. return 10, "Q1mi"
  3. }
  4. func main() {
  5. x, _ := foo()
  6. _, y := foo()
  7. fmt.Println("x=", x)
  8. fmt.Println("y=", y)
  9. }

常量

相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 常量的声明和变量声明非常类似,只是把var换成了const,常量在定义的时候必须赋值。

常量声明

标准声明

  1. const pi = 3.1415
  2. const e = 2.7182

批量声明

  1. const (
  2. pi = 3.1415
  3. e = 2.7182
  4. )

批量声明赋值

三个常量的值相等

  1. const (
  2. n1 = 100
  3. n2
  4. n3
  5. )

iota

iota是go语言的常量计数器,只能在常量的表达式中使用。 iota在const关键字出现时将被重置为0。const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。 使用iota能简化定义,在定义枚举时很有用。

  1. const (
  2. n1 = iota //0
  3. n2 //1
  4. n3 //2
  5. n4 //3
  6. )

几个常见的iota示例:

使用_跳过某些值

  1. const (
  2. n1 = iota //0
  3. n2 //1
  4. _
  5. n4 //3
  6. )

iota声明中间插队

  1. const (
  2. n1 = iota //0
  3. n2 = 100 //100
  4. n3 = iota //2
  5. n4 //3
  6. )
  7. const n5 = iota //0

定义数量级

定义数量级 (这里的<<表示左移操作,1<<10表示将1的二进制表示向左移10位,也就是由1变成了10000000000,也就是十进制的1024。同理2<<2表示将2的二进制表示向左移2位,也就是由10变成了1000,也就是十进制的8。)

  1. const (
  2. _ = iota
  3. KB = 1 << (10 * iota)
  4. MB = 1 << (10 * iota)
  5. GB = 1 << (10 * iota)
  6. TB = 1 << (10 * iota)
  7. PB = 1 << (10 * iota)
  8. )

多个iota定义在一行

  1. const (
  2. a, b = iota + 1, iota + 2 //1,2
  3. c, d //2,3
  4. e, f //3,4
  5. )