#90DaysOfDevOps - 变量、常量和数据类型 - 第十一天
在我们开始今天的学习之前,我想向Techworld with Nana和这段精彩简洁的Go基础之旅欢呼。
在第8天我们设置了环境,[第9天]我们学习了Hello #90DaysOfDevOps 的代码,[第10天]我们查看了Go工作区并更深入了解了编译和运行代码。
今天我们要学习变量(Variables),常量(Constants)和数据类型(Data Types),并编写一个新的程序。
Go中的变量和常量
让我们从规划这个应用程序开始,我觉得开发一个程序是告诉我们#90DaysOfDevOps挑战还有多少天的一个好办法。
这里首先要考虑的是,在构建应用程序时,我们欢迎参与者加入,并且我们会向用户反馈当前完成天数。我们将多次用到#90DaysOfDevOps。这是一个很好的例子,将#90DaysOfDevOps作为我们程序中的一个变量。
- 变量用于存储值
- 类似一个带有信息或数值的盒子
- 后续我们可以在整个程序中使用这个变量,这将在变量发生改变时提供便利,我们只需要在一处改变它的值。这意味着我们可以只改变一个变量值,将其用于社区中的其他挑战中。
为了在我们的Go程序中声明变量,我们使用一个关键字(keyword)来定义一个值。它将存在于我们稍后出现的func main
代码块中。你可以在keywords中查看更多相关信息。
请记住并确保你的变量名是被定义的。如果你声明一个变量,你必须使用它,否则你会得到一个错误。这是为了避免可能出现的无效代码(那些从未被使用的代码)。对于未使用的包也是如此。
通过上面的设置,我们会在后续代码片段中使用它,你可以通过下面的输出看到我们已使用这一变量。
package main
import "fmt"
func main() {
var challenge = "#90DaysOfDevOps"
fmt.Println("Welcome to", challenge "")
}
你可以在这里找到上述代码片段。
你会看到我们构建了上述示例代码,并得到下列输出。
我们知道我们的挑战期限是90天,但接下来也可能是100天,所以我们想去定义一个变量来帮助我们记录。但是在我们的程序中,我们想要把它定义为一个常量。常量和变量类似,除了它们的值不能被改变(我们会创建一个新的应用并改变这个常量,其中90的数值不会改变)。
添加const
到我们的代码中,并添加一行来打印它。
package main
import "fmt"
func main() {
var challenge = "#90DaysOfDevOps"
const daystotal = 90
fmt.Println("Welcome to", challenge)
fmt.Println("This is a", daystotal, "challenge")
}
你可以在这里找到上述代码。
如果我们后续再次使用并运行go build
,你会看到下列输出。
最后,我们将在第十二天的时候添加其他的功能。现在,我们想加入另外的变量来表示我们已完成这个挑战的天数。
我在下边添加了叫dayscomplete
的变量,代表完成天数。
package main
import "fmt"
func main() {
var challenge = "#90DaysOfDevOps"
const daystotal = 90
var dayscomplete = 11
fmt.Println("Welcome to", challenge, "")
fmt.Println("This is a", daystotal, "challenge and you have completed", dayscomplete, "days")
fmt.Println("Great work")
}
你可以在这里找到上述代码。
再次运行go build
或者直接使用go run
。
下面是更容易解读的代码示例。到目前为止,我们用到了Println
,我们也可以将Printf
配合%v
(代表在代码后边的变量)来使用。另外使用\n
来换行。
这里我用到了%v
来使用默认格式,同时在fmt package documentation中也谈到了其他的一些用法。
变量也可以用更简单的方式来定义。除了在定义的时候使用var
和你可以使用的type
,下面的代码也可以达到相同的目的,并且能做到更加简洁。这种方法只适用于变量,而不适用于常量(const)。
数据类型
在上述例子中,我们并没有定义变量的类型,这是因为Go会根据我们输入的值来得知它是什么类型,至少它对保存的值有效。然而,如果我们想让用户输入特定的数据类型,情况又会有所不同。
我们已经在代码中用到了字符串和整型。整型用来表示天数,字符串用来表示这个挑战的名称。
这里需要关注的,不同的数据类型可以做不一样的事情。例如,整型可以做乘积,而字符串不可以。
下面列举了四种类型
- 基础型(Basic type),数字(numbers)、字符串(strings)、布尔型(booleans)在这个类别下。
- 聚合型(Aggregate type),数组(array)和结构体(structs)在这个类别下。
- 引用型(Reference type),指针(pointer)、切片(slices)、集合(maps)、函数(functions)和通道(channels)在这个类别下。
- 接口型(Interface type)
数据类型是编程中的一个重要概念。数据类型明确了不同变量的大小和类型。
Go是静态的,这意味着一旦变量的类型被定义了,它只能用于储存该类型的数据。
Go有三种基本的数据类型:
- bool: 指一个布尔值,true或false
- Numeric: 指整型、浮点型和复杂型
- string: 指一个字符值
Golang by example给出了很详细的数据类型的例子。
我也推荐Techworld with Nana,里边有谈到许多Go中数据类型的详细内容。
如果我们想去定义一个变量的类型,我们可以做以下操作:
因为Go给定了变量一个值,我们可以直接打印出来:
fmt.Printf("challenge is %T, daystotal is %T, dayscomplete is %T\n", conference, daystotal, dayscomplete)
对于整型和浮点型还有许多不同的种类,你可以查看上面提到的链接,阅读更详细的内容。
- int = 整数
- unint = 正整数
- floating point types = 含有十进制分量的数
相关资料
- StackOverflow 2021 Developer Survey
- Why we are choosing Golang to learn
- Jake Wright - Learn Go in 12 minutes
- Techworld with Nana - Golang full course - 3 hours 24 mins
- NOT FREE Nigel Poulton Pluralsight - Go Fundamentals - 3 hours 26 mins
- FreeCodeCamp - Learn Go Programming - Golang Tutorial for Beginners
- Hitesh Choudhary - Complete playlist
接下来我们会开始添加一些用户输入的功能到程序中,我们可以查询已经完成了多少天的挑战。
第十二天见。