Go 语言进阶 - 工程进阶| 青训营笔记

84 阅读4分钟

Go 语言进阶 - 工程进阶| 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

一、本堂课重点内容:

  1. 并发编程——从并发编程的视角了解Go高性能的本质。
  2. 依赖管理——了解G○语言依赖管理的演进路线。
  3. 单元测试——从单元测试实践出发,提升质量意识。
  4. 项目实战——通过项目需求、需求拆解、逻辑设计、代码实现感受真实的项目开发。

二、详细知识点介绍:

并发编程

协程:用户态,轻量级线程,栈KB级别。
线程:内核态,线程跑多个协程,栈MB级别。
通信:go提倡通过通信共享内存而不是通过共享内存而实现通信

image.png 并发安全问题:
lock加锁—— image.png WaitGroup实现协程同步阻塞(time.Sleep()无法精确判断子协程结束的时间)

image.png image.png

依赖管理

  • 目前广泛应用的是Go Module
  • 依赖管理三要素:
    1.配置文件,描述依赖——go.mod
    2.中心仓库管理依赖库——Proxy
    直接使用版本管理仓库下载依赖,存在多个何题,首先无法保证构建的确定性:软件作者可以直接在代码平台增加/修改/删除软件版本,导致下次构建使用另外版本的依赖,或首找不到依赖版本;无法保证依赖的可用性,软件作者可以删除软件,导致依赖不可用;会大幅增加第三方代码托管平台压力。而Go Proxy可以解决这些问题,(它是一个服务站点,它会缓存源站中的软件内容。缓存的软件版本不会改变,并且在源站软件删除之后仍然可用,构建时会直接从Go Proxy站点拉取依赖。
    image.png
    3.本地工具——go get/mod
    image.png image.png

单元测试

  • 单元测试主要包括:输入,测试单元,输出,以及校对,单元的概念比较广,包括接口,函数,模块等;用最后的校对来保证代码的功能与我们的预期相符;单测一方面可以保证质量,在整体覆盖率足够的情况下,一定程度上既保证了新功能本身的正确性,又未破坏原有代码的正确性。另一方面可以提升效率,在代码有bug的情况下,通过编写单测,可以在一个较短的周期内定位和修复问题。
  • 规范
    1. 单元测试文件名必须以xxx_test.go命名
    2. 方法必须是TestXxx开头
    3. 方法参数必须 t *testing.T
    4. 测试文件和被测试文件必须在一个包中

项目实战

  • 分层结构 image.png 整体分为三层,repository数据层,service逻辑层,controller视图层。
    数据层关联底层数据模型,也就是这里的model,封装外部数据的增删改查,数据存储在本地文件,通过文件操作拉取话题,帖子数据;数据层面向逻辑层,对service层透明,屏蔽下游数据差异,不管下游是文件,还是数据库,还是微服务等,对service层的接口模型是不变的。
    Service逻辑层处理核心业务逻辑,计算打包业务实体entity,对应我们的需求,就是话题页面,包括话题和回帖列表,并上送给视图层。
    Controller视图层负责处理和外部的交互逻辑,以view视图的形式返回给客户端,对于我们需求,封装json格式化的请求结果, api形式访问。

三、课后个人总结:

  • 本章有什么知识点不容易掌握?
    1.测试方面没有理解到位,待课后继续深化
    2.第一次接触go实战项目,短时间较难全部掌握,待仔细研读实例项目代码。
  • 遇到的问题
    1.项目实战中 最后运行curl --location --request GET'http://0.0.0.0:8080/community/page/get/2' 命令报错,应改为 curl --location --request GET http://localhost:8080/community/page/get/2
  • 碍于时间篇幅,本篇笔记较为简略,待后续完善

四、引用参考: