这篇文章接着介绍go语言的基本语法
一.结构体
(1)定义结构体:结构体由关键字、结构体类型名称和具体成员构成
(2)结构体初始化:
variable_name := structure_variable_type {value1, value2...valuen}
variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}
举例:s2 := Student{2, "Sanji", 'f', 20, "EastSea"}
(3)访问结构体成员:如果要访问结构体成员,需要使用点号 . 操作符,格式为 结构体.成员名
(4)结构体指针:
定义结构体指针变量:var struct_pointer *Books
结构体指针变量可以存放结构体变量地址:struct_pointer = &Book1
结构体指针访问结构体成员,使用 "." 操作符:struct_pointer.title
补充:有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。
二.切片
由于go数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
(1)定义切片
可以声明一个未指定大小的数组来定义切片:var identifier []type
切片不需要说明长度
(2)创建切片
var slice1 []type = make([]type, len,capacity)
也可以简写为 slice1 := make([]type, len,capacity)
capacity为可选参数
(3)切片初始化
s :=[] int {1,2,3 } //直接初始化切片,[] 表示是切片类型,{1,2,3} 初始化值依次是 1,2,3,其 cap=len=3
s := arr[:]
s := arr[startIndex:endIndex] //将 arr 中从下标 startIndex 到 endIndex-1 下的元素创建为一个新的切片
s := arr[startIndex:]
s := arr[:endIndex]
s :=make([]int,len,cap)
(4) len() 和 cap() 函数
len() 方法获取长度
cap() 方法计算容量,即可以测量切片最长可以达到多少
(5)空(nil)切片:一个切片在未初始化之前默认为 nil,长度为 0
(6)切片截取:可以通过设置下限及上限来设置截取切片 [lower-bound:upper-bound]
(7) append() 和 copy() 函数
append()函数:向切片添加元素
copy() 函数:如果想增加切片的容量,我们必须**创建一个新的更大的切片**并把**原分片的内容都拷贝过来**
三.范围Range
Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。
for key, value := range oldMap {
newMap[key] = value
}
for key := range oldMap //只读取 key
for _, value := range oldMap //只读取 value
四.Map集合
(1)定义Map:可以使用内建函数 make 也可以使用 map 关键字来定义 Map:
/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type
/* 使用 make 函数 */
map_variable = make(map[key_data_type]value_data_type)
map_variable : = make(map[key_data_type]value_data_type)
(2)使用Map
获取元素:v1 := m["apple"] // 获取键值对
修改元素:m["apple"] = 5 // 修改键值对
获取 Map 的长度:len := len(m)
遍历 Map:
for k, v := range m {
fmt.Printf("key=%s, value=%d\n", k, v)
}
删除元素:delete(m, "banana")// 删除键值对,参数为 map 和其对应的 key
注意:
Map 是无序的,遍历 Map 时返回的键值对的顺序是不确定的。
在获取 Map 的值时,如果键不存在,返回该类型的零值
Map 是引用类型,因此对 Map 的修改会影响到所有引用它的变量
以上是对go语言基础语法的总结,我大致了解了go语言的语法结构,之后还需要进行代码练习来巩固这些知识。