常用的数据结构有字符串(strings),数组(arrays)和结构体(structs),以及另一位颇受欢迎的成员map。
字符串是Unicode编码,其值不能修改,而其他方面和你想的差不多。
s="Hello"
可以使用len函数获取字符串的长度,使用索引操作符[0]可以访问字符串中的字符。Go语言中的字符串类型相当简陋,但使用stirng package可以实现类似其他语言字符串的所有功能。
数组(arrays)以中括号([])声明,索引从零开始。例如:
var buff [32]byte
fmt.Println(buff[10])
多维数组通过数组的数组实现,
var buff [32][32]byte
fmt.Println(buff[10][0])
数组(array)不是动态的,不能动态分配大小。但可以使用切片(slice)实现同样的效果。切片包含数组(array)的一部分,可以动态变更大小。
结构体(structs)与其他语言类似,如下:
func main() {
type point struct {
x, y int
}
var p = point{10, 10}
fmt.Println(p.x)
}
上例声明了新的结构体类型,包括两个成员x和y。在main函数中创建并初始化了该结构体类型的实例(instance)。Go语言通常不使用术语“实例(instance)”,而更喜欢使用术语“值(value)”,所以你是创建了该类型的一个值(value)。
结构体定义中可以嵌套结构体作为成员。初始化器(initializer){10,10}是结构体literal(译注:literal可以理解为立即数,见维基)。在结构体literal中也可以使用成员名例如{X:10}。
这是我们首次介绍Go类型,关于这个话题之后还有更多内容。
最后一个数据类型是Map,等价于其他语言中的hash map,关联数组(associative array)或者字典(dictionary)。
给定键的类型以及值的类型就能创建Map。如果从来没有使用过关联数组,那就把它想象成一个数组,数组的值不是通过索引访问,而是通过通用类型的键访问。例如。:
var m = make( map[string]int)
m["mike"] = 10
m["lucy"] = 30
fmt.Println(m["lucy"])
显示结果是30.
make函数是能够基于Type(类型)创建Value(值)(译注:可以理解为实例)的两个函数之一,要详细了解它,我们需要学习更多关于类型的内容。