青训营day2 go语言入门 | 青训营笔记

56 阅读2分钟

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

一、本堂课重点内容

  • 并发编程:协程、通道、锁、同步
  • 依赖管理:Gopath、Go Vendor、Go Moudle
  • 单元测试:mock测试、基准测试

二、详细知识点介绍

1 并发编程

  • 并发与并行
    • 并发:在一个单体cpu上同时运行多个程序,cpu在每个程序上轮流切换
    • 并行:在多个cpu上运行多个程序,可以在同一时刻有多个程序运行
  • 进程、线程、协程
    • 进程:是资源的分配单位
    • 线程:是处理器调度的执行单位
    • 协程:是轻量级的线程,一个线程可以跑多个协程
  • go中使用go关键字+函数,开启协程
  • channel用于通信,分为无缓冲通道和有缓冲通道
  • lock用于保证读写数据的一致性
  • waitgroup可以监控管理多个协程

2 依赖管理

  • 演化过程GOPATH --> Go Vendor --> Go Module(主流)
  • go mod
    • init 初始化,创建go.mod文件
    • download 下载模块到本地缓存
    • tidy 增加需要的依赖,删除不需要的依赖

3 单元测试

  • 规则
    • 所有测试文件以_test.go结尾
    • 在要测试的函数名前+Test
    • 测试的代码覆盖率一般为50~60%

三、实践案例

  • 做一个简单的web服务端,根据查询的id返回json字符串
  • 数据层:对数据进行增删改查
  • 逻辑层:对数据层进一步封装,处理核心业务
  • 视图层:接收请求,返回数据

四、课后个人总结

  • 关于并发编程,go采用了比线程更为轻量级的协程,极大的降低系统开销,在用户态使用自己的调度机制。协程之间的通信使用channel,很方便。
  • go的依赖管理是一个不断演化的过程,当前的gomod与java的maven非常类似,如果之前学过maven,可以快速理解gomod。
  • 测试非常重要,go test可以方便的查看测试的代码覆盖率,这点很不错。
  • 项目案例部分是一个简单的单体web服务,这里面的代码格式和分层结构很值得参考。

五、引用参考