Go的复合数据类型
上节我们学过来基本数据类型,本节说说go的复合数据类型。

##数组 Arrays 让我们首先声明一周中所有天的数组。
// 声明一个空数组的字符串
var days []string
// 声明一个包含元素的数组
days := [...]string{"monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"}
如果我们想查询数组中的第一个元素或特定元素,我们可以以与其他语言非常相似的方式查询:
fmt.Println(days[0]) // 打印 'monday'
fmt.Println(days[5]) // 打印 'saturday'
##切片 Slices 切片和数组之间的区别非常微妙。 Go中的切片允许您访问底层数组元素的子集。
切片由三个部分组成,指针,长度length和容量capactiy。让我们试着用一个例子来形象化。比方说,例如,我们有一个星期几的数组,我们可以使用切片来仅提取那些工作日的天数。
days := [...]string{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}
weekdays := days[0:5]
fmt.Println(weekdays)
// 这会返回: [Monday Tuesday Wednesday Thursday Friday]
##映射 Maps 映射是Go表示的哈希表,这是一种允许您将一种任意数据类型映射到另一种数据的数据结构。例如,让我们根据该频道的订阅者数量创建 YouTube频道名称=>订阅数量 的Map:
youtubeSubscribers := map[string]int{
"TutorialEdge": 2240,
"MKBHD": 6580350,
"Fun Fun Function": 171220,
}
fmt.Println(youtubeSubscribers["MKBHD"]) // 打印输出 6580350
这是字符串数据类型和int数据类型之间的映射。
##结构 Structs 在Go中,我们有一个结构的概念。 这些结构允许我们创建数据类型,这些数据类型是其他数据类型的聚合(类似与其它语言的Class)。
比如说,我们在应用程序中有一个Person的概念。我们可以创建一个person结构,其中包含许多字段,例如,我们可以有一个name字段,其类型为string,age字段的类型为int,如下所示:
// 我们的 Person 结构
type Person struct {
name string
age int
}
// 声明一个新的 `Person`
var myPerson Person
使用这些结构的优点是我们可以有效地处理所有这些值或字段,因为它们被称为单个实体并且可以轻松地修改它们。
// 声明一个新的Person, `Michael`
mike := Person{name: "Michael", age: 32}
// 试图在我受伤之前回到过去
mike.age = 18
##结构嵌套 Nested Structs 由于我们可以在结构中创建嵌套结构,因此结构具有令人难以置信的可扩展性。例如,假设我们有一个团队结构,该团队中有许多人:
package main
import (
"fmt"
)
func main() {
type Person struct {
name string
age int
}
// 我们的团队struct
type Team struct {
name string
players [2]Person
}
// 声明一个空的 'Team'
var myTeam Team
fmt.Println(myTeam)
players := [...]Person{Person{name: "Forrest"}, Person{name: "Gordon"}}
// 声明一个带玩家的Team
celtic := Team{name: "Celtic FC", players: players}
fmt.Println(celtic)
}
##小结 希望本教程对你有用,它让你深入了解如何在自己的Go程序中使用更高级的数据类型,来编写更有趣的应用。
最后修改于 2019-07-29