在 Go 语言中,常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。 下面我们使用 const 关键字来定义常量:
package main
import "fmt"
import "math"
// "const" 关键字用来定义常量
const s string = "appropriate"
func main() {
fmt.Println(s)
// "const"关键字可以出现在任何"var"关键字出现的地方
// 区别是常量必须有初始值
const n = 20
// 常量表达式可以执行任意精度数学计算
const d = 3e20 / n
fmt.Println(d)
// 数值型常量可以在程序的逻辑上下文中获取类型
// 比如变量赋值或者函数调用。
// 例如,对于math包中的Sin函数,它需要一个float64类型的变量
fmt.Println(math.Sin(n))
}
输出的结果为:
appropriate
6e+11
-0.28470407323754404
通常用 var 声明语句可以创建一个特定类型的变量,然后给变量附加一个名字,并且设置变量的初始值。 变量的声明的语法一般是:
var 变量名字 类型 [ = 表达式]
通常情况下“类型”或“= 表达式”两个部分可以省略其中的一个。如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型信息。 如果初始化表达式被省略,那么将用零值初始化该变量。 数值类型变量对应的零值是 0,布尔类型变量对应的零值是 false,字符串类型对应的零值是空字符串, 接口或引用类型(包括 slice、map、chan 和函数)变量对应的零值是 nil。 数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值。
零值初始化机制可以确保每个声明的变量总是有一个良好定义的值,因此在 Go 语言中不存在未初始化的变量。
通常我们在编程的过程中,也用简短声明变量。它以“名字 := 表达式”形式声明变量,变量的类型根据表达式来自动推导。
destination := 12
result := rand.Float64() * 3.0
因为简洁和灵活的特点,简短变量声明被广泛用于大部分的局部变量的声明和初始化。var 形式的声明语句往往是用于需要显式指定变量类型地方,或者因为变量稍后会被重新赋值而初始值无关紧要的地方。
变量的生命周期指的是在程序运行期间变量有效存在的时间间隔。对于在包一级声明的变量来说,它们的生命周期和整个程序的运行周期是一致的。而相比之下,在局部变量的声明周期则是动态的:从每次创建一个新变量的声明语句开始,直到该变量不再被引用为止,然后变量的存储空间可能被回收。函数的参数变量和返回值变量都是局部变量。它们在函数每次被调用的时候创建。
参考资料*