后端基础day2-golang进阶|青训营笔记

69 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第2天。本篇为第五届字节跳动青训营-寒假专场-后端基础课程的笔记。

课程链接:juejin.cn/course/byte…

语言进阶

主要学习并发编程。

  • 并发:单核多线程
  • 并行:多线程在多核CPU上运行

image.png

  • 协程:用户态,轻量级协程,栈MB级别。
  • 线程:内核态,线程跑多个协程,栈KB级别。

例子:快速打印hello goroutine:0-4,输出结果无顺序。

image.png

image.png

Go提倡通过通信共享内存,主要利用channel。

make(chan int)    # 无缓冲,有阻塞作用
make(chan int, 2) # 有缓冲

例子:计算平方

image.png

A子协程发送0-9数字;B子协程计算输入数字的平方;主协程输出最后的平方数。带缓冲的chan可以解决生产效率与消费速度不均衡的问题。

并发安全lock:加锁稳定输出,不加锁输出未知结果。应避免共享内存时使用非语法安全的读写操作。

waitgroup:add计数器,done计数器-1,wait阻塞直到计数器为0。

依赖管理

gopath-govender-gomodule。

gopath:项目代码直接依赖src下的代码;无法实现package的多版本控制。

govender:每个项目引入一个依赖的副本,解决了多个项目需要同一个package的多版本问题。但会存在不兼容问题。

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

  • 配置文件,描述依赖:go.mod
  • 中心仓库管理依赖库:proxy
  • 本地工具:go get/mod

image.png

测试

  • 回归测试:回归特地场景
  • 集成测试:针对功能
  • 单元测试:单个函数模块

image.png

项目实战

  • 需求设计
  • 代码开发
  • 测试运行

image.png

image.png

image.png

image.png

获取话题信息与回帖信息,是并行的,并没有先后顺序,协程实现。

image.png