开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情 这也是第29篇文章
参考资料
字节内部课后端模块
并发控制
协程
协程运行于用户态,一个线程管理多个协程。栈是KB级别的。
协程可通过“Go”关键字触发
通道
提倡通过通信共享内存
原因:如果是通过共享内存进行通信,涉及到临界区的访问,当多个Go程序访问时,涉及到了xx问题(这里没有很听得清老师说的),影响程序性能
同步
如加锁
依赖管理
GOPATH
弊端:无法实现package的多版本控制
改进:Vendor
每个项目增加一个vendor文件,里面存放该项目依赖的副本。找依赖优先从vendor找
弊端:无法解决 一个项目下包含两个包,这两个包分别依赖两个不兼容的包 的问题
GO MODULE
三要素:
- go.mod
- proxy
- go get/mod
测试
单元测试
规则:
- 测试文件以_test.go结尾
- 测试函数以Test开头
- 初始化逻辑放到TestMain中
tips:
- 指标:覆盖率
- 测试分支相互独立
- 测试单元粒度足够小,函数单一职责
mock测试
使用背景:有web依赖
基准测试
分析系统性能时在本地测试
项目实战
需求描述
E-R图
分层结构
Reposity 数据层
数据Model,外部数据的增删改查
像这样建立一个model:
Service 逻辑层
业务entity,核心业务逻辑输出
这是实体:
我觉得这种就是业务逻辑:
controller 视图层
视图view,处理和外部的逻辑交互
这种就是业务逻辑码
Router
在server.go的fun main()中,有这样一段代码:
指定路径,这个路径下有什么什么参数,返回什么什么内容。
运行测试
如果提示地址不可达,将老师代码里的0.0.0.0换成localhost就可以了。
在一个终端窗口执行 go run server.go ,另一个窗口执行crul那条命令
curl --location --request GET "http://localhost:8080/community/page/get/2"
感觉这个crul工具用得好,可以取代postman噢