【Go基础学习】 Go语言进阶、依赖管理、测试及项目实战

227 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情 这也是第29篇文章

参考资料

字节内部课后端模块

并发控制

协程

协程运行于用户态,一个线程管理多个协程。栈是KB级别的。

协程可通过“Go”关键字触发

通道

提倡通过通信共享内存

原因:如果是通过共享内存进行通信,涉及到临界区的访问,当多个Go程序访问时,涉及到了xx问题(这里没有很听得清老师说的),影响程序性能

同步

如加锁

依赖管理

GOPATH

弊端:无法实现package的多版本控制

改进:Vendor

每个项目增加一个vendor文件,里面存放该项目依赖的副本。找依赖优先从vendor找

弊端:无法解决 一个项目下包含两个包,这两个包分别依赖两个不兼容的包 的问题

GO MODULE

三要素:

  • go.mod
  • proxy

image.png

  • go get/mod image.png image.png

测试

单元测试

规则:

  • 测试文件以_test.go结尾
  • 测试函数以Test开头
  • 初始化逻辑放到TestMain中

tips:

  • 指标:覆盖率
  • 测试分支相互独立
  • 测试单元粒度足够小,函数单一职责

mock测试

使用背景:有web依赖

基准测试

分析系统性能时在本地测试

项目实战

需求描述

image.png

E-R图

image.png

分层结构

image.png

Reposity 数据层

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

像这样建立一个model: image.png

Service 逻辑层

业务entity,核心业务逻辑输出

这是实体: image.png

我觉得这种就是业务逻辑:

image.png

controller 视图层

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

这种就是业务逻辑码

image.png

Router

在server.go的fun main()中,有这样一段代码:

image.png

指定路径,这个路径下有什么什么参数,返回什么什么内容。

运行测试

如果提示地址不可达,将老师代码里的0.0.0.0换成localhost就可以了。

在一个终端窗口执行 go run server.go ,另一个窗口执行crul那条命令 curl --location --request GET "http://localhost:8080/community/page/get/2" image.png

image.png

感觉这个crul工具用得好,可以取代postman噢