声明
1.四种类型的声明语句:var、const、type和func,分别对应变量、常量、类型和函数实体对象的声明
2.包一级声明语句声明的名字可在整个包对应的每个源文件中访问,局部声明的名字就只能在函数内部很小的范围被访问
常量 、变量
var 变量名字 类型 = 表达式
- 零值初始化机制,数值类型零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil
- 同时声明一组变量
,
用逗号分隔 - 简短变量声明
:=
,只有对已经在同级词法域声明过的变量才和赋值操作语句等价
1. demo
package main
import "fmt"
// 常量声明
const boilingF = 212.0
//func main() {
// var f = boilingF
// var c = (f - 32) * 5 / 9
// fmt.Printf("%g° or %g℃", f, c)
//}
func main() {
// 变量声明
const freezingF, boiling = 32.0, boilingF
// 调用函数 fToC 计算 入参为 float64 类型,返回参数为 float64 类型
fmt.Printf("%g°F = %g°C\n", freezingF, fToC(freezingF)) // "32°F = 0°C"
fmt.Printf("%g°F = %g°C\n", boiling, fToC(boiling)) // "212°F = 100°C"
}
// 入参为 float64 类型,返回参数为 float64 类型
func fToC(f float64) float64 {
// 计算并返回
return (f - 32) * 5 / 9
}
2. 变量的生命周期
变量的生命周期指的是在程序运行期间变量有效存在的时间段。对于在包一级声明的变量来说,它们的生命周期和整个程序的运行周期是一致的。而相比之下,局部变量的生命周期则是动态的:每次从创建一个新变量的声明语句开始,直到该变量不再被引用为止,然后变量的存储空间可能被回收。函数的参数变量和返回值变量都是局部变量。它们在函数每次被调用的时候创建。
Go语言的自动垃圾收集器对编写正确的代码是一个巨大的帮助,但也并不是说你完全不用考虑内存了。你虽然不需要显式地分配和释放内存,但是要编写高效的程序你依然需要了解变量的生命周期。例如,如果将指向短生命周期对象的指针保存到具有长生命周期的对象中,特别是保存到全局变量时,会阻止对短生命周期对象的垃圾回收(从而可能影响程序的性能)。