Go语言上手-工程实践丨青训营笔记

79 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。

课堂笔记

本课重点内容

01. 语言进阶——从并发编程视角了解Go高性能的本质

Go并发优势

Go语言最大的特点就是从语言层面支持并发,开发者不用担心并发的底层逻辑、内存管理,只需要编写好自己的业务逻辑即可。Go语言也提供了十分强大的垃圾回收机制。

并发VS并行

并发:多线程程序在一个核的cpu上运行。

并行:多线程程序在多个核的cpu上运行。

Goroutine

goroutine是Go并发设计的核心,也叫协程,它比线程更加轻量,因此可以同时运行成千上万个并发任务。Go语言内部已经实现了goroutine之间的内存共享,它比线程更加易用、高效和轻便。

CSP(Communicating Sequential Processes通信顺序进程)

Go提倡通过通信共享内存。

Channel

make(chan 元素类型, [缓冲大小])

无缓冲通道 make(chan int)

有缓冲通道 make(chan int,2)

并发安全Lock

lock sync.Mutex
lock.Lock()
lock.Unlock()

WaitGroup

Add(delta int)    计数器+delta
Done()            计数器-1
Wait()            主协程阻塞直到计数器为0

02. 依赖管理——Go语言依赖管理的演进路线

GOPATH->Go Vendor->Go Module

03. 测试——单元测试实践

规则

所有测试文件以_test.go结尾

func TestXxx(*testing.T)

初始化逻辑放到TestMain中

04. 项目实战

需求描述

展示话题(标题,文字描述)和回帖列表

暂不考虑前端页面实现,仅仅实现一个本地web服务

话题和回帖数据用文件存储

分层结构

数据层:数据Model,外部数据的增删改查

逻辑层:业务Entity,处理核心业务逻辑输出

视图层:视图view,处理和外部交互逻辑