学习Golang中的变量
变量
变量是一个可以在程序执行过程中改变的命名值。与常量(也是一个命名的值)的区别在于,变量的值可以在运行时被修改。
变量的声明
在Go中,变量是按照这种模式声明的。 var {标识符}{类型}。例子:
var songName string
var lengthOfSong uint16
var isMusicOver bool
var songRating float32
零值
如果在声明变量时没有给它赋值(如上图),那么它将以 "零值 "初始化。实际值取决于数据类型。一般来说:
- 数字数据类型为0
false对于 数据类型boolean- 空字符串 (
"") 用于string数据类型
默认值
变量的初始值可以在声明时分配:
var shoppingCartQuantity = 1
var shoppingCartItemName = "cupholder"
var shoppingCartPrice = 19.99
var shoppingCartExtendedWarranty = true
定义多个变量
Go有一种速记方法,用于在一条语句中声明多个变量。使用关键字var (或const),后面加括号,每个变量都在自己的行中:
var (
a = 5
b = 10
c = 15
)
另一种在一条语句中声明多个变量,并以其零值初始化的方法是:
var part1, part2 string
也可以声明多个变量,同时初始化它们,让它们的类型从值中推断出来:
anInteger, aString, aBoolean := 42, "Hello", true
速记声明
:= 符号是声明变量和分配默认值的一种速记方法。变量的类型是从值的类型中推断出来的,而不是明确地声明。
例子:
package main
import (
"fmt"
)
func main() {
message := "Hello, world!"
fmt.Println(message)
}
Go提供了另一种声明和初始化变量的方法,即推断其类型:
package main
import (
"fmt"
)
func main() {
var planet = "Earth" // Inferred type: string
var radiusInKm = 6371.009 // Inferred type: float64
var daysInTheYear = 365 // Inferred type: int (int64 or int32)
var hasMoon = true // Inferred type: boolean
fmt.Printf("%T %T %T %T\n", planet, radiusInKm, daysInTheYear, hasMoon)
}
上面的代码打印出来了:
string float64 int bool
注意,从整数字面推断其类型的值(如上面的365)将是int 。在大多数计算机系统中,它们的长度为64位。在32位系统中,这些变量的长度为32位。
更新一个变量
= 符号根据语句右侧的表达式(即"="之后)为变量分配一个新值。= 被称为 "赋值运算符"。它与上面在声明变量时用于分配默认值的运算符相同。它也可以在代码的后面部分用于更新变量的值(即给它分配一个新值)。
例子:
package main
import (
"fmt"
)
func main() {
var count uint64
fmt.Println(count)
count = count + 1
fmt.Println(count)
count += 1
fmt.Println(count)
count = 99
fmt.Println(count)
}
这将打印:
0
1
2
99
第一个值(0)是数字数据类型的 "零值",它是数字变量的初始值,除非在var 语句中设置不同的默认值。
第二个值(1)是表达式count + 1 的结果。
第三个值(2)是表达式count + 1 的结果。+= 符号是基于变量当前值的算术表达式的简写。
第三个值(99)是表达式99 的结果(也就是说,你可以给变量分配任何值;你不限于基于前一个值的算术表达式)。