Go 语言入门 —— 数据结构
本文主要介绍 Go 语言中的一些基本的数据结构。
数组
与其他语言类似,Go 语言的数组是长度不可变的。数组的定义如下:
1 | [长度]数据类型 |
如下为数组的定义及赋值操作:
1 | var a [10]int |
在定义数组的时候,可以为数组赋初始值。此时,当数组元素确定时,数组的长度可以自动推导出来。
1 | var a []int = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} |
切片
Go 语言中的切片(slice)就相当于其他编程语言中可以自动扩容的动态数组,如 C++ 中的 vector
、Java 中的 ArrayList
等。
定义切片的语法如下:make(切片类型, 长度, 容量)
。其中,容量可以省略,如果被省略,则容量和切片的长度一致。
1 | slc1 := make([]int, 3) |
添加元素
在切片的末尾添加元素,可以使用 append
函数进行操作。append
函数在添加元素时,会自动根据切片的容量对切片进行扩容。同时,函数将返回新的切片。
1 | s := make([]int, 0, 10) |
获取切片某一范围
在 Go 语言中,如果需要获取切片的某个范围,可以使用 s[a : b]
的语法。其取出来的范围区间是左闭右开([a, b)
,即 b
取不到)的。
1 | s := make([]int, 0, 10) |
哈希
在 Go 语言中,定义哈希的格式是 map[K]V
,其中 K
为 key 的类型,V
为 value 的类型。如下演示了两种哈希的定义方式:
1 | hsh1 := map[string]int{ |
如果需要删除一个 key,可以直接使用 delete
函数。
1 | delete(hsh1, "two") |
range
在 上一篇 中,已经提了 for-range
循环。range
可以迭代容器中的元素。对于数组、切片等类型,其返回元素所在的下标以及元素值。对于哈希,其返回 key 和 value。
1 | a := []int{1, 2, 3} |
结构体
Go 语言中,定义结构体的语法如下:
1 | type 结构体名 struct { |
如下为结构体最基本使用示例:
1 | type Point struct { |