学习Golang中的变量(附代码示例)

101 阅读3分钟

学习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 的结果(也就是说,你可以给变量分配任何值;你不限于基于前一个值的算术表达式)。