变量
定义:
- 变量必须先定义后使用
- 变量必须有类型
- 类型定下来后不能改变
代码:
Go 语言引入了关键字 var来定义变量
// 变量定义方式1:
var name int
name = 1
// 变量定义方式2(简短命名,自动推算类型):
age := 1
注:go语言中变量定义了不使用是不行的
// 多变量定义1(自动推算类型):
var user1, user2, user3 = "bobby1", 1, "bobby3"
// 多变量定义2:
var (
name = "bobby"
age = 18
ok bool
)
变量支持的数据类型
var v1 int // 整型
var v2 string // 字符串
var v3 bool // 布尔型
var v4 [10]int // 数组,数组元素类型为整型
var v5 struct { // 结构体,成员变量 f 的类型为64位浮点型
f float64
}
var v6 *int // 指针,指向整型
var v7 map[string]int // map(字典),key为字符串类型,value为整型
var v8 func(a int) int // 函数,参数类型为整型,返回值类型为整型
匿名变量
在 Go 语言中,可以通过匿名变量,让代码看起来更加优雅,匿名变量则通过下划线 _ 来声明,任何赋予它的值都会被丢弃。 假设 GetName() 函数的定义如下,它返回两个值,分别为 userName 和 nickName:若只想获得 nickName,则函数调用语句可以用如下方式实现:
func GetName() (userName, nickName string) {
return "whd", "ninetyseven."
}
这种用法可以让代码可读性非常好。
_, nickName := GetName()
变量的作用域
每个变量在程序中都有一定的作用范围,称之为作用域。 全局变量如果一个变量在函数体外声明,则被认为是全局变量,可以在整个包甚至外部包(变量名以大写字母开头)使用,不管你声明在哪个源文件里或在哪个源文件里调用该变量。局部变量
在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量也是局部变量。尽管变量的标识符必须是唯一的,但你可以在某个代码块的内层代码块中使用相同名称的变量,此时外部的同名变量将会暂时隐藏(结束内部代码块的执行后隐藏的外部同名变量又会出现,而内部同名变量则被释放),你任何的操作都只会影响内部代码块的局部变量。
总结:
- 变量必须先定义才能使用
- go语言是静态语言,要求变量的类型和赋值类型一致
- 变量名不能冲突
- 简洁变量定义不能用于全局变量
- 变量是有零值,也就是默认值
- 定义了变量一定要使用,否则会报错
- Go 语言变量命名规则遵循驼峰命名法,即首个单词小写,每个新单词的首字母大写,如 userName,但如果你的全局变量希望能够被外部包所使用,则需要将首个单词的首字母也大写。
- 特殊变量匿名变量,使用_来舍弃一些不必要的返回值。
常量
const Pi float64 = 3.14159265358979323846
const zero = 0.0 // 无类型浮点常量
// 通过一个 const 关键字定义多个常量,和 var 类似
const (
size int64 = 1024
eof = -1 // 无类型整型常量
)
const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重赋值
const a, b, c = 3, 4, "foo" // a = 3, b = 4, c = "foo", 无类型整型和字符串常量
定义:
常量只可以是数值类型(包括整型、 浮点型和复数类型)、布尔类型、字符串类型等标量类型。 定义的时候就指定的值,不能修改, 常量尽量全部大写(代码规范) ##### 变量的作用域 以大写字母开头的常量在包外可见(类似于 public 修饰的类属性) 以小写字母开头的常量只能在包内访问(类似于通过 protected 修饰的类属性)预定义常量
Go预定义常量:true、false 和 iota。 true、false ,是布尔类型的真假值,iota 比较特殊,可以被认为是一个可被编译器修改的常量,在每一个 const 关键字出现时被重置为 0,然后在下一个 const 出现之前,每出现一次 iota,其所代表的数字会自动增 1。iota
iota: 常量生成器 从0开始,每调用一次加1,一般用于枚举
如果中断了iota那么必须显式的恢复, 后续会自动递增
每次出现const的时候, iota初始化为0
总结:
- 如果中断了iota那么必须显式的恢复, 后续会自动递增
- 自增类型默认是int类型
- iota能简化const类型的定义
- 每次出现const的时候, iota初始化为0