之前我学过C、Java、Python语言时总结的经验:
- 先建立整体框架,然后再去抠细节。
- 先Know how,然后know why。
- 先做出来,然后再去一点点研究,才会事半功倍。
- 适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。
- 对于GO语言,切记遵守语法格式规则。(例如python语言、例如SpringBoot框架等)
解释:某些知识点,就是很难了解,那么先做出来,然后继续向前学习,可能在某个时间点我们就会恍然大悟。
// 基本数据类型:
var num int = 100
fmt.Println("num =", num) // num = 100
// 指针类型:
var ptr *int = &num
fmt.Println("num的地址是:", &num) // num的地址是: 0xc04205a080
fmt.Println("ptr存储的是num的地址:", ptr) // ptr存储的是num的地址: 0xc04205a08
fmt.Println("ptr指针指向的变量内容:", *ptr) // ptr指针指向的变量内容: 100
- 解释var ptr *int = *num
1. ptr 是一个指针变量
2. ptr 的类型是*int
3. ptr 本身的值&num


引用类型:指针、slice切片、map、管道chan、interface等
值类型:变量直接存储值,内存通常在栈中分配。

应用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(也就是值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成了一个垃圾,由GC来回收。

内存的栈区和堆区示意图:
