前言
像大多数现代编程语言一样,Go
使用变量来处理数据。因此,当您创建变量时,该变量的基础数据将保存到系统内存中。然后,您可以使用该变量来访问、更新或删除该数据。
The var statement
有多种方法可以创建变量,其中之一是使用 var 语句。
Let’s take a closer look at line 10. This var
statement is made up of 2 parts:
变量声明:执行以下操作:
var
隔离了一些用于存储数据的内存资源。该内存资源分配有自己唯一的内存地址。内存地址看起来有点像这样,“0xc000010200”var
对该内存资源允许存储的数据类型(又名数据类型)施加了限制。在这个例子中,我们的内存资源应该只存储字符串。var
在操作系统的内部内存查找表中添加了一个条目,将变量的名称(在本例中为“greetings”)链接到其内存地址。这有点像您如何在智能手机上保存一个人的姓名及其电话号码。
Variable Initialization
赋值运算符 =
为该变量分配一个初始值。该值被保存到专门的内存资源中
现在让我们看看其他几行:
第 12 行:我们使用变量的名称来访问它的值并将其打印出来。
第 13 行:我们使用反射包的 TypeOf 函数打印出变量的数据类型。
使用默认值初始化变量
您实际上可以在不初始化的情况下声明一个变量。在这种情况下,变量确实被初始化,但具有默认的零值。
类型推断
So far, we’ve seen that you need 2 lines of code to create a variable:
var luckyNumber int // Declare step
luckyNumber = 7 // Assignment step
但是 var 也可以执行赋值步骤:
var luckyNumber int = 7
Which means you can create a variable with just a single line of code (line 9):
We can make line 9 even shorter by omitting the data type:
这仍然有效。 var
根据我们提供的数据为我们计算出变量的数据类型是什么。使用隐式类型声明变量称为类型推断。
Type Inference doesn’t always get it right, which is why on some occasions you need to explicitly specify the data type.
短赋值运算符:=
到目前为止,我们已经不再使用长格式创建变量:
var luckyNumber int
luckyNumber = 7
转唯了让 var 声明+赋值:
var luckyNumber int = 7
…声明一个隐式类型的变量:
var luckyNumber = 7
那么接下来呢?好吧,您可以通过将 var 替换为简短变量声明 :=
来使这一行更短:
luckyNumber := 7
:=
是在声明具有隐式类型的变量时使用 var 的替代方法。
几个重要的点:
- 您只能在函数内部使用 := 。要在函数之外声明变量,您必须回到使用 var
- 您只能在使用类型推断声明变量时使用 := 。如果需要显式指定数据类型,则需要返回使用 var
声明多个变量
如果您想一次性创建多个变量,则可以执行以下操作:
var name string
var city string
var age int
var married bool
您可以在一行中声明多个相同数据类型的变量。这意味着您可以将上述内容重写为:
var name, city string
var age int
var married bool
如果您还想分配值,您可以执行以下操作:
var name, city string = "David", "London"
var age int = 40
var married bool = true
此外,如果您对 Go 为您“猜测”数据类型(即类型推断)感到满意,那么您可以将上述内容写成一行:
var name, city, age, married = "David", "London", 40, true
由于我们在推断类型,我们可以使用 := 重写上面的内容:
name, city, age, married := "David", "London", 40, true
虽然这更简洁,但它确实让阅读变得有点困难。
声明多个变量(使用 var 块)
创建多个变量的另一种方法是使用 var(…) 块:
var (
name string
city string
age int
married bool
)
像以前一样,您可以根据数据类型对变量声明进行分组:
var (
name, city string
age int
married bool
)
你可以赋值:
var (
name, city string = "David", "London"
age int = 40
married bool = true
)
如果你想使用类型推断,那么你可以通过省略数据类型规范来进一步缩短它:
var (
name, city = "David", "London"
age = 40
married = true
)
此外,如果使用类型推断,您可以使用 := 简写赋值运算符而不是 var(…) 块:
name, city := "David", "London"
age := 40
married := true
变量作用域
您可以在函数内部或外部声明变量。如果在函数之外,则包中的其他函数可以访问这些变量。如果变量名以大写字母开头,则该变量是公共的,可以从包外部访问。我们将在后面的文章中详细介绍。
总结
正如你所看到的,有很多,……很多,……很多,创建变量的方法。它们都有自己的用途,创建变量的方法不一定正确或错误。我只是触及了 Go 变量的皮毛,我计划在未来写更多的文章来更详细地介绍变量。但是现在,让我们快速回顾一下迄今为止我们介绍的关键点。
这意味着 var 可以一次性完成以下操作:
- var 关键字用于声明+初始化变量。它还可以为变量赋值并进行类型推断以确定变量的数据类型。
- 速记赋值运算符( shorthand assignment operator) := 是使用 var 创建具有隐式类型的变量的替代方法。
- 您可以使用 var(…) 块声明多个变量。