• 1.7 变量和声明
    • 链接

    1.7 变量和声明

    这将是美好的开始和结束,通过写下x = 4,我们查看变量,可以说声明了一个变量并赋值,但是很不幸,go语言变量声明和赋值比这更复杂。通过学习一些简单的示例开始学习变量声明和赋值。然后在下一章,当我们创建并使用结构体时,我们会深入学习。尽管如此,你需要花一些时间去适应。

    你可能会惊讶,为什么会如此复杂,让我们以一些例子开始学习。

    在go中最直接的方式去声明变量并赋值也是最繁琐的:

    1. package main
    2. import (
    3. "fmt"
    4. )
    5. func main() {
    6. var power int
    7. power = 9000
    8. fmt.Printf("It's over %d\n", power)
    9. }

    在这里我们声明了一个int型变量power。默认情况下,go会给power赋一个0值。整型赋0,布尔型赋false,字符串型赋""等。然后,我们将9000赋值给变量power。我们也可以将2行代码合并成一行:

    var power int = 9000

    虽然需要输入很多。go有一种方便简洁的变量声明操作符::=,go可以推断变量的类型:

    power := 9000

    这里有一个简洁的写法,通过函数也能正常工作:

    1. func main() {
    2. power := getPower()
    3. }
    4. func getPower() int {
    5. return 9001
    6. }

    这里需要谨记,:=用于声明一个变量并给变量赋值。为什么会这样?因为一个变量不能被声明2次(不在相同的代码范围)。如果你试着运行下面代码,你将会得到一个错误信息。

    1. func main() {
    2. power := 9000
    3. fmt.Printf("It's over %d\n", power)
    4. // COMPILER ERROR:
    5. // no new variables on left side of :=
    6. power := 9001
    7. fmt.Printf("It's also over %d\n", power)
    8. }

    编译器会提示:=左边不是一个新变量。这意味着当我们第一次声明变量时,我们使用:=。但是在随后的赋值,我们要使用=。这有很多意义,但这也随时提醒着你何时该使用:==

    如果你仔细阅读错误信息,你将发现有多个变量。因为go支持多个变量同时赋值(使用=或者:=):

    1. func main() {
    2. name, power := "Goku", 9000
    3. fmt.Printf("%s's power is over %d\n", name, power)
    4. }

    另外,如果一个变量是新变量也可以使用:=进行赋值。例如:

    1. func main() {
    2. power := 1000
    3. fmt.Printf("default power is %d\n", power)
    4. name, power := "Goku", 9000
    5. fmt.Printf("%s's power is over %d\n", name, power)
    6. }

    尽管变量power使用了:=,但是编译器不会在第2次使用:=时报错,因为这里有一个变量name,这是一个新的变量,允许使用:=。但是你不能改变power的类型。它已经被声明成一个整型,只能赋值整数。

    现在,需要知道的最后一件事是,类似包导入,go程序中不能存在未使用的变量,例如:

    1. func main() {
    2. name, power := "Goku", 1000
    3. fmt.Printf("default power is %d\n", power)
    4. }

    这段代码不能编译,因为变量name已经声明,但是没有被使用。类似未使用的导入包,可能这会让你有点失望,但是总的来看,我认为这是为了让代码更加的简洁和具有可读性。

    接下来不在介绍关于变量的声明和赋值相关内容了。现在,你只需要记住使用var NAME TYPE声明一个变量,并且变量的初始值为它相应类型的零值,使用NAME := VALUE声明一个变量并赋值,使用NAME = VALUE去给已经声明过的变量赋值。

    链接

    • 目录
    • 上一节:导入包
    • 下一节:函数声明