Go语言工程实践(并发&测试) | 青训营笔记

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

第二节课——Go语言工程实践

一、语言进阶——从并发编程了解Go高性能本质

  1. 并发&并行

    Go可以充分发挥多核优势,高效运行——为并发而生;

    • 多线程程序在一个核的cpu上运行——并发(利用时间片的切换来提高)
    • 多线程程序在多个核的cpu上运行——并行
  2. Goroutine

    image-20220507220928864

    协程:用户态,轻量级线程,栈MB级别

    线程:内核态,线程跑多个协程,栈KB级别

    Go开多个协程的方法——调用函数时在该函数前+关键字go即开一个协程

  3. CSP

    提倡通过通信共享内存,而不是通过共享内存而实现通信

    image-20220507221626226

  4. Channel——引用类型

    由make(chan 元素类型,[缓冲大小])来创建

    • 无缓冲通道——make(chan int)

    • 有缓冲通道——make(chan int 2)

image.png

  1. 并发安全——+🔒(Lock)

  2. WaitGroup——协程间的同步

二、依赖管理——GoMoudle实践

  1. Go依赖管理

    GOPATH——Go Vendor——Go Moudle

    不同环境依赖版本不同

    • GOPATH

      环境变量——bin、pkg(编译的中间产物)、src(项目源码)

      项目直接依赖src代码

      go get要下载最新的包在src下

    • Go Vendor

      增加vender文件夹,所有依赖包在vender有副本,解决了多个项目需要同一个package

    • Go Moudle

      通过go.mod文件管理依赖包版本

      通过go get/go mod指令工具管理依赖包

  2. 依赖管理三要素

    • 配置文件、描述依赖——go.mod
    • 中心仓库管理依赖库——Proxy
    • 本地工具——go get/mod
  3. 依赖配置——依赖图

image.png

  1. 依赖分发——回源

    Proxy

    Go Proxy是一个服务站点,他会缓存源站中的软件内容,缓存的软件版本不会改变,切在源站删除后依然可以使用,从而实现依赖分发

  2. 工具——go get

    image-20220507225708918

  3. 工具——go mod

    image-20220507225738917

三、测试——单元测试、Mock测试、基准测试

  1. 测试是避免事故的最后一个屏障

image.png - 回归测试——QA,通过手动测试终端回归一些固定主流程场景 - 集成测试——系统功能维度做测试验证 - 单元测试——对单独的函数、模块做功能验证,层级从下至上,测试代码成本逐渐降低,测试覆盖率逐步上升

  1. 单元测试

    image-20220507230406715

四、项目实践——需求设计、代码开发、测试运行

需求描述

社区话题页面

  1. 展示话题(标题,文字)和回帖
  2. 一个本地web服务
  3. 话题和回帖用文件存储

E-R图

image-20220507232008381

分层结构

image-20220507232049380

数据层关联底层数据模型(model),数据存储在本地文件,通过文件操作拉取话题,帖子数据

数据层面向逻辑层,对service层透明,屏蔽下游数据差异

service逻辑层计算打包业务实体entiy,对应我们的需求,并上送给视图层

Controller视图层以view视图形式返回给客户端,对于我们的需求,封装json格式化的请求结果,api的形式访问

组件工具

github.com/gin-gonic/g…

posted @ 2022-05-08 17:05  Luciferpluto  阅读(0)  评论(0)    收藏  举报  来源