变量是对一块内存空间的命名,程序可以通过定义一个变量来申请一块内存空间。然后可以通过引用变量名来使用这块存储空间。
2.1.1 变量命名
Go语言中的变量名、常量名、类型名、函数名和包名等所有的命名和C语言一样都遵循这样一个简单的命名规则:一个名字必须以一个字母或下划线开头,后面可以跟任意数量的字母、数字或下划线。对于字母区分大小写,例如:name和Name是两个不同的名字。
命名不能与关键字相同,Go语言提供了25个关键字,只能在特定的语法中使用。
25个关键字
break
default
func
interface
select
case
defer
go
map
struct
chan
else
goto
package
switch
const
fallthrough
if
range
type
continue
for
import
return
var
此外,Go语言还有大约30多个预定义的名字,主要用于内建的常量、类型和函数。这些名字不是关键字,可以重新定义和使用,虽然在一些特殊场景中重新定义是有意义的,但建议尽量不要重新定义,以造成语义混乱问题。
内建常量
true false iota nil
内建类型
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
内建函数
make len cap new append copy close delete
complex real imag
panic recover
2.1.2 变量声明
1 一般声明格式
使用var可以创建一个特定类型的变量。变量声明的一般语法如下:
var 变量名 类型 = 表达式
其中“类型”或“=表达式”两个部分可以省略其中的一个。如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型。如果表达式省略,将用零值初始化该变量。
var i int = 1
var j int //j的值初始化为0
var k = 10 // k的类型自动推导
如果一个名字在函数内部定义,那么它只能在函数内部使用,如果在函数外部定义,那么在当前包的所有文件都可以访问。名字首字母的大小写决定了它在包外的可见性,首字母大写在包外可以访问。包本身的名字一般总是用小写字母。
在包级别声明的变量会在main入口函数执行之前完成初始化,局部变量将在声明语句被执行的时候完成初始化。如果没有显示初始化,那么将用零值初始化该变量。一个变量声明后没有使用也会引起编译错误。
2 简短变量声明
“名字 := 表达式”,变量的类型根据表达式自动推导。由于使用简单灵活,被广泛用于大部分的局部变量的声明和初始化。注意,简短变量声明不能用于包级别的变量声明。
i := 100
3 多个变量声明
var i, j, k int = 1, 2, 3
var m, n int
var a, b, c = 1, 2, 3
d, e, f := 1, 2, 3
name, age := "张三", 20
也可以这样写:
var (
name string
age int
)
2.1.3 赋值
1 简单赋值
赋值语句是更新一个变量的值,最简单的赋值”变量名= 新值的表达式”
var i int
i = 1 //简单赋值
2复合赋值运算符
特定的二元算术运算符和赋值语句的复合操作有一个简洁的形式
var i int
i = i + 1
i += 1 //与i = i + 1等价