整个知识体系围绕逻辑结构来的话,是面向过程,围绕对象来的话,是面向对象。所以一个知识体系可以从字段,函数,结构体入手,再到详细编码的逻辑结构,也就是面向过程进行加深。然后是指针,异常机制,IO,并发等。有了基本架构之后才是网络,后台等高级特性。
需要注意的是go语言的设计基本上遵循尽量简化的原则进行,就是能简化就简化,当然,也有部分奇怪的没有简化的,但是这也是因为有其他的考量原因。
字段:
1.数据操作。包括基本数据类型的定义以及操作,运算,切片等。注意指针。
2.字段在结构体中可以是匿名字段。
3.array,map,slice是高级结构体。array是数组,而slice针对数组进行的切片处理。map是映射。使用range遍历。
4.平行赋值i,j=i+1,j+1.这个一般用在if中。
结构体:
1.结构体的定义。在go中类是结构体与函数叠加而成。而结构体就是算法与结构中的“结构”。
2.type用于重定义数据,定义结构体,接口。
3.go更加接近理论,所以在go中类,方法,变量,被叫做结构体,函数,字段。.
函数:
1.函数的定义。在go中都是函数,而属于结构体的函数可以称为方法。
2.函数有匿名函数。
3.func funcName(input1 type1, input2 type2) (output1 type1, output2 type2) {
//这里是处理逻辑代码
//返回多个值
return value1, value2
}
字段和返回字段可以简化。如input1,input2 type。这其实就是如果当前没有就往后面找。
4.注意变参func(arg...int)
流程控制:
1.if参照了for,可以使用;分号隔开,前面的是变量声明。
2.switch的case后面自带break,想要往下执行需要使用fallthrough。switch跟的语句如果没有添加,那么就是true。
3.for格式如果省略了分号,那么就相当于while。for range可以用于读取slice和map的数据。
4.goto是跳转语句。
指针:
1.string,slice,map都是基于指针的机制了,可以直接传递,不需要再取地址传指针操作。但是注意slice的长度发生变化的话,仍需取地址传指针。
2.结构体指针函数的使用需要注意。
表达式:
1.go不支持三元表达式。也就是说一个n:=expr?trueV:falseV在这里不能使用。
异常:
1.go中,异常处理使用panic(),recover(),defer联合使用。panic抛出异常中断,如果想要回复,可以在defer中使用recover恢复。但是go中,尽量少用异常处理。
IO:
1.go中使用make()创建切片,映射,程道。返回对象,而new()返回的是指针。
2.chan分为有缓冲和无缓冲两种。
3.chan作为线程件通信的IO通道。
4.常使用select,case,default组合chan进行操作。
并发:
1.并发里面主要是多线程以及常用的辅助类等。
2.并发的内容一般包含:
(1)线程的初始化。线程的实现是go xxx,这个过程叫做gorutine。
(2)线程的通信。通过channel进行通信。注意,这里channel本身是具有锁功能的,往往作为最简单常用的锁进行使用
(3)线程对于资源的操作。这里主要是同步异步,阻塞和非阻塞等概念。
同步异步的关键在于互斥,而阻塞和非阻塞关键在于锁。但是两者其实很接近。
所以往往出现的是互斥锁。这里常用的是sync.Mutext.Lock()实现互斥锁。使用lock.Lock()实现锁。runtime模块往往用于运行时候的一些操作,帮助线程实现让出时间片,线程退出等操作。atomic模块是原子操作。其他的一些类和函数是基于这些概念进行的扩展。
(4)并发的架构?
并行:?