Go语言变量的声明(使用var关键字)
标准格式
Go语言的变量声明的标准格式为:
var name type
变量声明以关键字 var 开头,后置变量类型,行尾无须分号。
批量格式
例如:
var (
a int
b string
c []float32
d func() bool
e struct {
x int
}
)
使用关键字var 和括号,可以将一组变量定义放在一起。
简短格式
除 var 关键字外,还可使用更加简短的变量定义和初始化语法。
名字 := 表达式
需要注意的是,简短模式(short variable declaration)有以下限制:
- 定义变量,同时显式初始化。
- 不能提供数据类型。
- 只能用在函数内部。
和 var 形式声明语句一样,简短变量声明语句也可以用来声明和初始化一组变量:
i, j := 0, 1
变量命名建议
- 以母或下画线开始,由多个字母、数字和下画线组合而成
- 区分大小写
- 使川驼峰( camel case )拼写格式
- 局部变员优先使川短名。
- 不要使用保留关键字
- 不建议使用与预定义常量、类型、内置函数相同的名字
- 专有名词通常会全部大写,例如 escape HTML
Go语言变量的初始化
go语言在声明变量时,自动对变量对应的内存区域进行初始化操作。每个变量会初始化其类型的默认值,例如:
- 整型和浮点型变量的默认值为 0 和 0.0。
- 字符串变量的默认值为空字符串。
- 布尔型变量默认为 bool。
- 切片、函数、指针变量的默认为 nil。
当然,依然可以在变量声明时赋予变量一个初始值。
变量初始化的标准格式
var 变量名 类型 = 表达式
编译器推导类型的格式
在标准格式的基础上,将类型省略后,编译器会尝试根据等号右边的表达式推导变量的类型,例如:
var num= 100
等号右边的部分在编译原理里被称做右值(rvalue)。
短变量声明并初始化
var 的变量声明还有一种更为精简的写法,例如:
num:=100
这是Go语言的推导声明写法,编译器会自动根据右值类型推断出左值的对应类型。
注意:由于使用了:=,而不是赋值的=,因此推导声明写法的左值变量必须是没有定义过的变量。若定义过,将会发生编译错误。
在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即便其他变量名可能是重复声明的,编译器也不会报错
Go语言变量的作用域
一个变量(常量、类型或函数)在程序中都有一定的作用范围,称之为作用域。
因为Go语言会在编译时检查每个变量是否使用过,一旦出现未使用的变量,就会报编译错误。对于这一点,我觉得是有利有弊吧,好处当然是对于程序性能和内存回收来说,坏处就是整天被这种编译错误所扰,实在是烦扰,如果不能理解变量的作用域,就有可能会带来一些不明所以的编译错误。
根据变量定义位置的不同,可以分为以下三个类型:
- 函数内定义的变量称为局部变量
- 函数外定义的变量称为全局变量
- 函数定义中的变量称为形式参数
下面就来分别介绍一下。
局部变量
在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量都属于局部变量。
局部变量不是一直存在的,它只在定义它的函数被调用后存在,函数调用结束后这个局部变量就会被销毁。
全局变量
在函数体外声明的变量称之为全局变量,全局变量只需要在一个源文件中定义,就可以在所有源文件中使用,当然,不包含这个全局变量的源文件需要使用“import”关键字引入全局变量所在的源文件之后才能使用这个全局变量。
全局变量声明必须以 var 关键字开头,如果想要在外部包中使用全局变量的首字母必须大写。
Go语言程序中全局变量与局部变量名称可以相同,但是函数体内的局部变量会被优先考虑。
形式参数
在定义函数时函数名后面括号中的变量叫做形式参数(简称形参)。形式参数只在函数调用时才会生效,函数调用结束后就会被销毁,在函数未被调用时,函数的形参并不占用实际的存储单元,也没有实际值。
形式参数会作为函数的局部变量来使用。
参考: