1. 变量
Go 中的变量是标识符。例如,我们可能需要存储客户的电子邮件地址,但还需要确保它是有效的。这种情况下,可以创建一个名为 email 的变量来存储电子邮件的值。电子邮件地址可以分配给 email 变量。
变量引用一个内存地址,赋值给变量的实标值存储在该地址中。当编译器需要变量的值时,它使用命名的内存地址来获取它。
创建变量时,必须包含变量的类型,可以显式定义变量的类型,也可以当在同一条语句中为变量赋值时指定可识别的类型。创建变量的基本语法如下所示。
var identifier type [= value]
变量名即这里的 identifier 。对于电子邮件地址,我们使用 email 作为标识符。type 表示要存储的信息的类型,可以是数字、字母或其他值。例如,要创建一个可以存储简单整数的变量,可以按如下所示声明。
var myNumber int
这段代码创建一个名为 myNumber 的变量并将其类型设置为 int ,用于存储基本的整数。
除了设置变量的类型,还可以在同一条语句中赋值。例如,下面的代码再次声明变量 myNumber,并将其设置为 42 。
var myNumber int = 42
还可以在程序后面的单独语句中赋值(或改变它的值)。声明 myNumber 后,可以通过简单地赋值来改变它的值。
myNumber = 84
下面代码展示了一个完整的代码清单,它创建了一个变量,存储字符串“Hello World”。
package main
import "fmt"
func main() {
var message string = "Hello World!"
fmt.Println(message)
}
在这个代码清单中,可以看到一个变量被声明为标识符(名称为message)。
此外,可以看到这个变量被赋值为等号之后的字符串值(“Hello World!)。然后可以设置打印变量的内容,就像下一行代码使用 fmt.Println 所做的那样。程序运行结果如下所示:
Hello World!
1.1 命名变量
因为变量是标识符,所以它们遵循与 Go 中标识符相同的命名约定。也就是说,变量名以字母或下画线开头,然后是一系列字母、数字或下画线。下面代码展示了一个无效变量定义的例子。
package main
import "fmt"
func main(){
var 0_email string = "alice@daolian.io"
fmt.Println(0_email)
}
在这个代码清单中,可以看到变量0_email 被声明为 string 类型。它被赋值为 alice@daolian.io。运行这个代码时,编译器会针对标识符 0_email 产生如下语法错误。
syntax error: unexpected literal 0_e, expected name
这个变量名无效,因为标识符必须以字母或下画线开头。
1.2 声明和初始化变量
Go 中的变量必须具有类型,该类型表示将存储的信息的类型。更重要的是,类型定义了在变量中存储数据所需的内存量。
1.声明和初始化一个变量
package main
import "fmt"
func main() {
var message string
message = "Hello World!"
fmt.Println(message)
}
该代码清单并没有在创建标识符的同时给它赋值,而是分两步完成这个过程。可以看到,第一步中,变量 message 被创建为字符串,然后在第二步中,将变量赋值为 "Hello World!"。每一个步骤都是作为单独的语句完成的。
2. 声明多个变量
可以通过简单地为每个变量创建一条语句来定义多个变量。
var message string
var email string
此外,还可以在同一条语句中定义多个同类型的变量
package main
import "fmt"
func main() {
var message, email string
message = "Hello World!"
email = "alice@daolian.io"
fmt.Println(message)
fmt.Println(email)
}
在这个代码清单中,在同一行中将 message 和 email 声明为字符串类型变量。要在同一行中声明多个变量,可以用逗号分隔它们。声明这两个变量后,代码清单继续为它们赋值。然后打印它们的内容。该程序运行结果如下:
Hello World!
alice@daolian.io
3. 声明和初始化多个变量
还可以初始化多个同类型的变量并在同一条语句中为每个变量赋值,如下面代码所示:
package main
import "fmt"
func main() {
var message, email string = "Hello,World!", "alice@daolian.io"
fmt.Println(message)
fmt.Println(email)
}
在这段代码中,变量 message 和 email 是在声明它们的同一行语句中初始化的。等号右边列出了用于初始化变量的值。值是从左到右赋值的,因此第一个字符串 “Hello,World! ” 被赋给左边的第一个变量 message 。第二个字符串“alice@daolian.io”被赋给第二个变量 email。