Go语言常用类型初探 | 青训营笔记

116 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第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)
}

切片不同于数组可以任意更改长度,然后也有更多丰富的操作。他的核心操作主要如下:

  1. 我们可以用 make 来创建一个切片,可以像数组一样去取值。
  2. 使用 append 来追加元素。 注意 append 的用法的话,你必须把 append 的结果赋值为原数组。

因为 slice 的原理实际上是它有一个它存储了一个长度和一个容量,加一个指向一个数组的指针,在执行 append 操作的时候,如果容量不够的话,会扩容并且返回新的 slice。 slice 此初始化的时候也可以指定长度。

  1. 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 是实际使用过程中最频繁用到的数据结构。他主要有如下几条要点:

  1. 用 make 来创建一个空 map ,这里会需要两个类型,第一个是那个 key 的类型,这里是 string 另一个是 value 的类型,这里是 string 。
  2. 用[]去存储或者取出键值对。
  3. 可以用 delete 从里面删除键值对。
  4. golang的map是完全无序的,遍历的时候不会按照字母顺序,也不会按照插入顺序输出,而是随机顺序。

结构体


type user struct {
    name string
    password string
}

func (u *user) login(password string) bool {
    return u.password == password
}

结构体是带类型的字段的集合,他初始化的方式主要有以下两种:

  1. 用结构体的名称去初始化一个结构体变量,构造的时候需要传入每个字段的初始值。
  2. 用这种键值对的方式去指定初始值,这样可以只对一部分字段进行初始化。

Tips. 同样的结构体我们也能支持指针,这样能够实现对于结构体的修改,也可以在某些情况下避免一些大结构体的拷贝开销。

在 Golang 里面可以为结构体去定义一些方法。类似其他语言里面的类成员函数。 只不过我们需要把结构体自身加上括号,写到函数名称前面。 比如这里,开发者可以像 u.checkPassword(“xx”) 这样去调用。

在实现结构体的方法的时候也有两种写法,一种是带指针,一种是不带指针。这个它们的区别的话是说如果你带指针的话,是引用,就可以对这个结构体去做修改。如果你不带指针的话,那你实际上操作的是一个拷贝,你就无法对结构体进行修改。