这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记
切片
func main() {
s := make([]string, 3)
s[1] = "G"
len(s)
s = append(s, "C", "J", "P")
c := make([]string, 3)
copy(c, s)
}
切片不同于数组可以任意更改长度,然后也有更多丰富的操作。他的核心操作主要如下:
- 我们可以用 make 来创建一个切片,可以像数组一样去取值。
- 使用 append 来追加元素。 注意 append 的用法的话,你必须把 append 的结果赋值为原数组。
因为 slice 的原理实际上是它有一个它存储了一个长度和一个容量,加一个指向一个数组的指针,在执行 append 操作的时候,如果容量不够的话,会扩容并且返回新的 slice。 slice 此初始化的时候也可以指定长度。
- slice 拥有像 python 一样的切片操作,是左闭右开区间。不过不同于python,这里不支持负数索引。
map
func main() {
m := make(map[string]string)
m["1"] = "G"
len(s)
delete(m, "1")
a := map[string]string{"1": G, "2": J}
}
下面我们介绍 map, 等同于其他编程语言语境中的哈希或者字典。 map 是实际使用过程中最频繁用到的数据结构。他主要有如下几条要点:
- 用 make 来创建一个空 map ,这里会需要两个类型,第一个是那个 key 的类型,这里是 string 另一个是 value 的类型,这里是 string 。
- 用[]去存储或者取出键值对。
- 可以用 delete 从里面删除键值对。
- golang的map是完全无序的,遍历的时候不会按照字母顺序,也不会按照插入顺序输出,而是随机顺序。
结构体
type user struct {
name string
password string
}
func (u *user) login(password string) bool {
return u.password == password
}
结构体是带类型的字段的集合,他初始化的方式主要有以下两种:
- 用结构体的名称去初始化一个结构体变量,构造的时候需要传入每个字段的初始值。
- 用这种键值对的方式去指定初始值,这样可以只对一部分字段进行初始化。
Tips. 同样的结构体我们也能支持指针,这样能够实现对于结构体的修改,也可以在某些情况下避免一些大结构体的拷贝开销。
在 Golang 里面可以为结构体去定义一些方法。类似其他语言里面的类成员函数。 只不过我们需要把结构体自身加上括号,写到函数名称前面。 比如这里,开发者可以像 u.checkPassword(“xx”) 这样去调用。
在实现结构体的方法的时候也有两种写法,一种是带指针,一种是不带指针。这个它们的区别的话是说如果你带指针的话,是引用,就可以对这个结构体去做修改。如果你不带指针的话,那你实际上操作的是一个拷贝,你就无法对结构体进行修改。