PART 1 概述

PART 2 练习

重点

疑问

模板

:::info (一)背景

:::

:::info (二)问

:::

:::info (三)key

:::

:::info (四)答

:::

:::success 概述

:::

:::danger 错解

:::

:::success 详解

:::

回忆表

  • 第一遍要求:?
  • 第二遍要求:?
  • 第三遍要求:?

此处为语雀卡片,点击链接查看

PART 3 局部分析

引用类型初始化理解

  • 比喻
    • 引用类型的指针 = 遥控器,var a []int等同于 a 是[]int牌电视的遥控器
    • 电视 = 分配空间
    • 导入节目 = 导入数据
  • 理解
    • 引用类型变量的 nil 理解
      • 只声明比如var a []int
        • 底层就是nil,也就是没有底层空间,啥也没有,不可调用,只有遥控器没电视,用不了,但可以接受一台旧电视或者别人已经激活好的电视,如 <font style="color:#DF2A3F;">a=[]int{1, 2}</font>/<font style="color:#DF2A3F;">a = []int{}</font>
        • 我们通常所说的变量类型指的是“底层空间数据”的类型 = 电视牌子,而不是遥控器牌子(当然这两个牌子必须一样),这里要说明的是:如果一个引用类型变量如果还没初始化,那么它也没有类型
  1. var a []int
  2. fmt.Printf("%T", a)
  3. // 结果是 nil
  1. * 二维变量 / 变量A嵌套了引用类型变量B
  2. + 二维数组,两层的引用,如果要彻底初始化,就需要两层分配底层空间,比如

! 复合数据类型 - 图1
但实际上我们通常只初始化第一层,比如 a := [][]int{}然后append

  1. + 对于`map[string]interface{}`类型,不仅map需要初始化,interface也需要,但通常我们只是初始化map`x := map[string]interface{}{}`interface{}虽然没初始化,是nil,不可调用,但可以接受别人的传参
  2. * 函数
new make
都是都初始化了变量
不同 + 针对值类型,如int, struct,返回指向该类型的指针 + 针对slice、map、…
  1. * 结构体 `var a *Node`

a 只是遥控器,没分配到电视,就是nil,不可调用字段或者方法比如a.xxx,但可以接受电视比如 a = &Node{0, nil, nil}

  1. - `a := []int{}`/ `a := []int{3,4,5}`等同于 直接给你一台已经激活的电视,或者给你台旧电视