go基础知识体系

来源:互联网 发布:d3.js 4.1中文api文档 编辑:程序博客网 时间:2024/06/05 07:58

        整个知识体系围绕逻辑结构来的话,是面向过程,围绕对象来的话,是面向对象。所以一个知识体系可以从字段,函数,结构体入手,再到详细编码的逻辑结构,也就是面向过程进行加深。然后是指针,异常机制,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)并发的架构?





并行:?










原创粉丝点击