变量
声明变量的一般形式是使用 var
关键字: var identifier type
命名采用小驼峰 numShips
, startDate
如果需要外包使用,则首字母要大写 NumShips
, StartDate
注意:他将变量的类型放在变量名称后面了
Go 可以根据值来自动推断变量类型,不过不建议
var a int = 15
var b string = "shuxiaoyuan"
var c bool = true
## 可以改写成如下形式
var (
a int = 15
b string = "shuxiaoyuan"
c bool = true
)
数据类型
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 // 函数,参数类型为整型,返回值类型为整型
当一个变量被声明之后,系统自动赋予它该类型的零值:
- int 0
- float 0.0
- bool false
- string ''
- 指针 nil
作用域
在函数外声明,则认为是全局变量 在函数体内部声明,则认识是局部变量
简短声明语法 :=
当你在函数体内声明局部变量时,应使用简短声明语法 :=
,如 a := 1
# 多变量定义和赋值
var a, b, c int
a, b, c = 5, 7, "abc"
# 直接交换变量值
a, b = b, a
空白标识符 _
也被用于抛弃值,如值 5 在:_, b = 5, 7
中被抛弃。
值类型和引用类型
所有像 int、 float、 bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,另外,像数组(第 7 章)和结构(第 10 章)这些复合类型也是值类型
在 Go 语言中,指针(第 4.9 节)属于引用类型,其它的引用类型还包括 slices(第 7 章),maps(第8 章)和 channel(第 13 章)。 被引用的变量会存储在堆中,以便进行垃圾回收,且比栈拥有更大的内存空间