1、变量概念

变量概念源于数学,在计算机中表示用来存储值或者存储计算结果的抽象概念。
变量本质上是一种对内存地址的引用,让你能够把程序中准备使用的每一段数据都赋给一个简短、易于记忆的名字进行操作。

2、变量的声明

和C语言一样,Go语言也是通过关键字 var进行声明变量,不同的是变量名放在类型的前面,具体格式如下:

  1. var 变量名 数据类型

例如:

  1. package main
  2. import "fmt"
  3. func main(){
  4. var x int //声明变量并赋值后,在后面的必须使用,不然会报错
  5. var y int
  6. var b bool
  7. fmt.Println(x) //0
  8. fmt.Println(y) //""
  9. fmt.Println(z) //false
  10. }

声明未赋值,系统默认赋这些类型零值。也就是说变量的值默认为 false。

  1. Int 类型,当 0 的时候表示 false
  2. String 类型,当为 "" 的时候表示false
  3. Bool 类型,当为 fasle的时候表示 false

3、声明多个变量

如果声明多个变量,可以进行简写

  1. // 声明多个相同类型变量
  2. var x, y int
  3. // 声明多个不同的类型变量
  4. var (
  5. x int
  6. y string
  7. z bool
  8. )

4、变量赋值

  1. // 先声明再赋值
  2. var x int
  3. x = 100
  4. fmt.Println(x) //必须被使用,不然会报错
  5. // 直接声明赋值
  6. var name = "shuaigaogao" //编译器会自动识别数据类型
  7. fmt.Println(name)
  8. // 声明赋值精简版
  9. name := "hello world"
  10. fmt.Println(name)
  1. 编译器会自动根据右值类型推断出左值的对应类型,等同于var s = “hello word!”。
  2. 该变量之前不能声明,否则重复声明
  1. // 赋值多个变量
  2. var a,b int
  3. a,b = 10,20
  4. fmt.Println(a,b)
  5. // 一行赋值多个变量
  6. var a,b,c = 100, "hello world", true
  7. fmt.Println(a,b,b)
  8. // 一行赋值多个变量,推荐
  9. name,age := "hello world", 22
  10. fmt.Println(name,age)
  11. // 多行赋值多个变量
  12. var (
  13. a = 100
  14. b = "hello world"
  15. c = true
  16. )
  17. fmt.Println(a,b,c)

5、匿名函数

匿名变量即是没有命名的变量,在使用多重赋值时,如果你想忽略某个值,可以使用匿名变量(anonymous variable)。匿名变量用一个 下划线(_)表示。

  1. // 正常变量赋值
  2. a,b,c := 4,5,6
  3. fmt.Println(a,b,c)
  4. // 如果只想接受最后一个值,可以对前面两个变量匿名
  5. _,_,x = 4,5,6 // 匿名变量是不可以被使用的,因为压根都不会分配内存给它。
  6. fmt.Println(x)
  1. 匿名变量不占用命名空间,不会分配内存
  2. 让代码非常清晰,基本上屏蔽掉了可能混淆代码阅读者视线的内容,从而大幅降低沟通的复杂度和代码维护的难度。

6、变量的命名规范

变量命名是需要遵循一定的语法规范,否则编译器不会通过。

  1. 1. 变量名称必须由数字、字母、下划线组成。
  2. 2. 标识符开头不能是数字 eg:错误 1a := 10 正确:a1 := 10
  3. 3. 标识符不能是保留字 关键字。
  4. 4. 建议使用驼峰标式命名,当名字有几个单词组成的时优先使用大小写分割 eg: companyName := "h"
  5. 5. 变量名尽量做到见名如意。
  6. 6. 变量名区分大小写。 eg: a := 10 这个 a A 不是同一个变量。

go语言中有 25 个关键字,是不能用于自定义变量名:

  1. break default func interface select
  2. case defer go map struct
  3. chan else goto package switch
  4. const fallthrough if range type
  5. continue for import return var

还有30多个预定义的名字,用于内建的常量、类型和函数。

  1. //内置常量
  2. true false iota nil
  3. //内建类型
  4. int int8 int16 int32 int64
  5. uint uint8 uint16 uint32 uint64 uintptr
  6. float32 float64 complex128 complex64
  7. bool byte rune string error
  8. // 内置函数:
  9. make len cap new append copy close delete
  10. complex real imag
  11. panic recover