如果您想用 Go 编程语言编程,您需要学习变量和数据类型的工作原理。轻而易举:从这里开始。
译自 Golang Variables and Data Types: An Introduction,作者 Jack Wallen。
既然你已经尝鲜了 Go 语言的工作原理,现在我们退一步来讨论变量和数据类型。如果你曾经使用过任何 其他编程语言,你应该已经 熟悉这些概念。但是,如果 Go 是你的第一门语言,那么理解变量和数据类型的目的以及它们如何发挥作用非常重要。
如果不了解变量和数据类型,你将很难快速掌握 Go(或任何语言)。但别担心,变量和数据类型都不是复杂的概念。事实上,变量非常简单。至于数据类型,你只需要知道类型及其工作原理即可。
变量
一个典型的变量以键值对的形式工作,如下所示:
代码语言:javascript复制key = value
非常简单。
在 Go 中,你可以声明一个变量,定义它的数据类型,然后给它一个值。语法如下所示:
代码语言:javascript复制var variableName dataType
我们用 var
声明变量,用变量名给变量命名,用数据类型定义数据类型。假设我们正在为名字创建一个变量
var fname string
我们所做的是声明一个名为 fname(表示名字)的变量,类型为字符串。我们使用字符串,因为名字将由字符 a/A-z/Z 组成(稍后详细介绍数据类型)。
我们还可以在同一行中用一个值初始化该变量(如果我们愿意),如下所示:
代码语言:javascript复制var fname string = New
让我们在一段代码块中使用它,同时为姓氏也创建一个变量。请记住(从我们之前的教程中),我们必须使用以下命令调用主包:
代码语言:javascript复制package main
接下来,我们必须使用以下行从 main 中导入“fmt”:
代码语言:javascript复制import ("fmt")
现在,我们将创建一个函数来定义我们的变量并打印名字和姓氏。该函数如下所示:
代码语言:javascript复制func main() {
var fname string = "New"
var lname string = "Stack"
fmt.Println(fname,lname)
}
我们的整个应用程序(名为 vars.go)如下所示:
代码语言:javascript复制package main
import ("fmt")
func main() {
var fname string = "New"
var lname string = "Stack"
fmt.Println(fname,lname)
}
我们使用以下命令运行应用程序:
代码语言:javascript复制go run vars.go
输出将是:
代码语言:javascript复制New Stack
简单有效。
但是,如何使用用户输入的数据初始化变量?这是一个很酷的技巧。我们将坚持上面的示例。为此,我们将使用 fmt.Scan 函数从主包中。在调用 main 和 fmt 之后,我们首先要做的(在我们的函数中)是用以下命令声明我们的变量:
代码语言:javascript复制var fname string
var lname string
接下来,我们写四行代码:
- 指示用户输入他们的名字。
- 接受名字的输入。
- 指示用户输入他们的姓氏。
- 接受姓氏的输入。
此部分如下所示:
代码语言:javascript复制fmt.Println("Enter your first name:")
fmt.Scan(&fname)
fmt.Println("Enter your last name:")
fmt.Scan(&lname)
最后,我们写一行来打印所有内容,如下所示:
代码语言:javascript复制fmt.Println("Your name is:", fname, lname)
整个代码如下所示:
代码语言:javascript复制package main
import ("fmt")
func main() {
var fname string
var lname string
fmt.Println("Enter your first name:")
fmt.Scan(&fname)
fmt.Println("Enter your last name:")
fmt.Scan(&lname)
fmt.Println("Your name is:", fname, lname)
}
当你运行应用程序时,它会询问名字,然后询问姓氏,并打印出这两个名字。
数据类型
Go 有许多包含的数据类型,分为三类:
- 基本类型(bool、int、float64、complex128、string)
- 聚合类型(数组、切片、结构)
- 引用类型(指针、通道、映射、接口)
基本类型很明显,定义如下:
var boolean bool = true
var integer int = 100
var float float64 = 100.09
var comp complex128 = 1 3i
var st string = “New Stack”
它们分解如下:
- 布尔值为 true/false
- int 是一个整数
- float64 是一个小数
- complext128 是所有复数的集合,具有浮点数和虚数分量
- string 是一个字符串
接下来,我们有聚合类型,它可以采用以下形式:
someArray := [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
var slice []int = someArray[0:5]
结构聚合类型有点复杂,因为它可以包含自定义字段。你像这样声明一个结构:
代码语言:javascript复制type Box struct {
X int
Y int
}
然后你可以像这样初始化这些值:
代码语言:javascript复制b := Box{1,2}
最后,还有引用类型,例如指针,它包含它们所基于的变量的内存地址。指针使用 * 字符,如下所示:
代码语言:javascript复制var p *int
然后我们可以声明如下内容:
代码语言:javascript复制myInteger := 100
然后我们像这样从变量创建指针:
代码语言:javascript复制p = &myInteger
我们稍后将深入探讨这些概念,但了解 Go 中包含的基本类型非常重要。
恭喜您在 Go 语言中又迈进了一步。它可能不如 Python 简单,但它远没有 C、C 或类似编程语言那么复杂。