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>
- 我们通常所说的变量类型指的是“底层空间数据”的类型 = 电视牌子,而不是遥控器牌子(当然这两个牌子必须一样),这里要说明的是:如果一个引用类型变量如果还没初始化,那么它也没有类型
- 底层就是nil,也就是没有底层空间,啥也没有,不可调用,只有遥控器没电视,用不了,但可以接受一台旧电视或者别人已经激活好的电视,如
- 只声明比如
- 引用类型变量的 nil 理解
var a []int
fmt.Printf("%T", a)
// 结果是 nil
* 二维变量 / 变量A嵌套了引用类型变量B
+ 二维数组,两层的引用,如果要彻底初始化,就需要两层分配底层空间,比如
但实际上我们通常只初始化第一层,比如 a := [][]int{}
然后append
+ 对于`map[string]interface{}`类型,不仅map需要初始化,interface也需要,但通常我们只是初始化map,`x := map[string]interface{}{}`,interface{}虽然没初始化,是nil,不可调用,但可以接受别人的传参
* 函数
new | make | |
---|---|---|
同 | 都是都初始化了变量 | |
不同 | + 针对值类型,如int, struct,返回指向该类型的指针 | + 针对slice、map、… |
* 结构体 `var a *Node`
a 只是遥控器,没分配到电视,就是nil,不可调用字段或者方法比如a.xxx
,但可以接受电视比如 a = &Node{0, nil, nil}
- `a := []int{}`/ `a := []int{3,4,5}`等同于 直接给你一台已经激活的电视,或者给你台旧电视