变量

定义:
  1. 变量必须先定义后使用
  2. 变量必须有类型
  3. 类型定下来后不能改变
代码:

Go 语言引入了关键字 var来定义变量

  1. // 变量定义方式1:
  2. var name int
  3. name = 1
  4. // 变量定义方式2(简短命名,自动推算类型):
  5. age := 1
  6. 注:go语言中变量定义了不使用是不行的
  7. // 多变量定义1(自动推算类型):
  8. var user1, user2, user3 = "bobby1", 1, "bobby3"
  9. // 多变量定义2:
  10. var (
  11. name = "bobby"
  12. age = 18
  13. ok bool
  14. )

变量支持的数据类型

  1. var v1 int // 整型
  2. var v2 string // 字符串
  3. var v3 bool // 布尔型
  4. var v4 [10]int // 数组,数组元素类型为整型
  5. var v5 struct { // 结构体,成员变量 f 的类型为64位浮点型
  6. f float64
  7. }
  8. var v6 *int // 指针,指向整型
  9. var v7 map[string]int // map(字典),key为字符串类型,value为整型
  10. var v8 func(a int) int // 函数,参数类型为整型,返回值类型为整型
匿名变量
在 Go 语言中,可以通过匿名变量,让代码看起来更加优雅,匿名变量则通过下划线 _ 来声明,任何赋予它的值都会被丢弃。 假设 GetName() 函数的定义如下,它返回两个值,分别为 userNamenickName
  1. func GetName() (userName, nickName string) {
  2. return "whd", "ninetyseven."
  3. }
若只想获得 nickName,则函数调用语句可以用如下方式实现:
  1. _, nickName := GetName()

1. 常量/变量/iota使用及细节 - 图1

这种用法可以让代码可读性非常好。
变量的作用域
每个变量在程序中都有一定的作用范围,称之为作用域 全局变量
如果一个变量在函数体外声明,则被认为是全局变量,可以在整个包甚至外部包(变量名以大写字母开头)使用,不管你声明在哪个源文件里或在哪个源文件里调用该变量。
局部变量
在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量也是局部变量。
尽管变量的标识符必须是唯一的,但你可以在某个代码块的内层代码块中使用相同名称的变量,此时外部的同名变量将会暂时隐藏(结束内部代码块的执行后隐藏的外部同名变量又会出现,而内部同名变量则被释放),你任何的操作都只会影响内部代码块的局部变量。
总结:
  1. 变量必须先定义才能使用
  2. go语言是静态语言,要求变量的类型和赋值类型一致
  3. 变量名不能冲突
  4. 简洁变量定义不能用于全局变量
  5. 变量是有零值,也就是默认值
  6. 定义了变量一定要使用,否则会报错
  7. Go 语言变量命名规则遵循驼峰命名法,即首个单词小写,每个新单词的首字母大写,如 userName,但如果你的全局变量希望能够被外部包所使用,则需要将首个单词的首字母也大写。
  8. 特殊变量匿名变量,使用_来舍弃一些不必要的返回值。

常量

  1. const Pi float64 = 3.14159265358979323846
  2. const zero = 0.0 // 无类型浮点常量
  3. // 通过一个 const 关键字定义多个常量,和 var 类似
  4. const (
  5. size int64 = 1024
  6. eof = -1 // 无类型整型常量
  7. )
  8. const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重赋值
  9. const a, b, c = 3, 4, "foo" // a = 3, b = 4, c = "foo", 无类型整型和字符串常量
定义:
常量只可以是数值类型(包括整型、 浮点型和复数类型)、布尔类型、字符串类型等标量类型。 定义的时候就指定的值,不能修改, 常量尽量全部大写(代码规范) ##### 变量的作用域 以大写字母开头的常量在包外可见(类似于 public 修饰的类属性) 以小写字母开头的常量只能在包内访问(类似于通过 protected 修饰的类属性)
预定义常量
Go预定义常量:truefalseiota truefalse ,是布尔类型的真假值,iota 比较特殊,可以被认为是一个可被编译器修改的常量,在每一个 const 关键字出现时被重置为 0,然后在下一个 const 出现之前,每出现一次 iota,其所代表的数字会自动增 1。

iota

iota: 常量生成器 从0开始,每调用一次加1,一般用于枚举

如果中断了iota那么必须显式的恢复, 后续会自动递增

1. 常量/变量/iota使用及细节 - 图2

每次出现const的时候, iota初始化为0

1. 常量/变量/iota使用及细节 - 图3

总结:
  1. 如果中断了iota那么必须显式的恢复, 后续会自动递增
  2. 自增类型默认是int类型
  3. iota能简化const类型的定义
  4. 每次出现const的时候, iota初始化为0