第六届字节跳动青训营笔记七| 青训营

109 阅读3分钟

变量

声明变量的一般形式是使用 var 关键字:var identifier type

需要注意的是,Go 和许多编程语言不同,它在声明变量时将变量的类型放在变量的名称之后。

Go 为什么要选择这么做呢? 首先,它是为了避免像 C 语言中那样含糊不清的声明形式,例如: int* a, b; 。在这个例子中,只有 a 是指针而 b 不是。如果你想要这两个变量都是指针,则需要将它们分开书写(你可以在 Go 语言的声明语法 页面找到有关于这个话题的更多讨论)。 而在 Go 中,则可以很轻松地将它们都声明为指针类型:

var a, b *int

其次,这种语法能够按照从左至右的顺序阅读,使得代码更加容易理解。

var a int 
var b bool 
var str string

当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil。记住,所有的内存在 Go 中都是经过初始化的。

变量的命名规则遵循骆驼命名法,即首个单词小写,每个新单词的首字母大写,例如: numShips 和 startDate 。

但如果你的全局变量希望能够被外部包所使用,则需要将首个单词的首字母也大写。

一个变量(常量、类型或函数)在程序中都有一定的作用范围,称之为作用域。如果一个变量在函数体外声明,则被 认为是全局变量,可以在整个包甚至外部包(被导出后)使用,不管你声明在哪个源文件里或在哪个源文件里调用该 变量。

在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。像 if 和 for 这些控制结构,而在这些结构中声明的变量的作用域只在相应的代码块内。一般情况 下,局部变量的作用域可以通过代码块(用大括号括起来的部分)判断。

尽管变量的标识符必须是唯一的,但你可以在某个代码块的内层代码块中使用相同名称的变量,则此时外部的同名变量将会暂时隐藏(结束内部代码块的执行后隐藏的外部同名变量又会出现,而内部同名变量则被释放),你任何的操 作都只会影响内部代码块的局部变量。

变量可以编译期间就被赋值,赋值给变量使用运算符等号 = ,当然你也可以在运行时对变量进行赋值操作。 示例:

a = 15 
b = false

一般情况下,当变量a和变量b之间类型相同时,才能进行如 a = b 的赋值。 声明与赋值(初始化)语句也可以组合起来。 示例:

var identifier [type] = value 
var a int = 15 
var i = 5 
var b bool = false 
var str string = "Go says hello to the world!"