Go 进阶 | 青训营笔记

48 阅读2分钟

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

介绍

  • 从工程实践角度,讲授在企业项目实际开发过程中的所遇的难题

1. 语言进阶(并发编程)

  • 并发和并行
    • 并发:多线程程序在一个核的 CPU 上运行(一段时间看起来是同时运行)
      • 主要是通过时间片的切换来实现Pasted image 20230116195657.png
    • 并行:多线程程序在多个核的 cpu 上运行
      • 真正的同时运行Pasted image 20230116195733.png
  • 协程和线程
    • 图示 Pasted image 20230116200055.png
    • 协程:用户态,轻量级线程,栈 KB 级别
      • 一次可以创建上万协程
    • 线程:内核态,线程可以跑多个协程,栈 MB 级别
      • 线程的操作都属于比较重的系统操作,会比较消耗资源
  • Go 提倡通过通信共享内存,而不是通过共享内存实现通信
    • 对比图Pasted image 20230116200431.png
    • Channel
      • make (chan type,[buffer_size])
        • 无缓冲通道(同步通道):make(chan int) Pasted image 20230116202302.png
        • 有缓冲通道:make(chan int,2)Pasted image 20230116202316.png

2. 依赖管理

  • 背景Pasted image 20230116204821.png
    • 工程项目不可能基于标准库 0~1 编码搭建
    • 管理依赖库
  • 发展阶段
    • 图示 Pasted image 20230116204840.png
    • GOPATH
      • 三个文件夹
        • bin(项目编译的二进制文件)
        • pkg(项目编译的中间产物,加速编译)
        • src(项目源码)
      • 特点
        • 项目代码直接依赖 src 下的代码
        • go get 下载最新版本的包到 src 目录下
      • 弊端
        • 无法实现 package 的多版本控制:A 和 B 依赖于同一个包的不同版本 Pasted image 20230116205302.png
    • Go Vendor
      • 特点
        • 项目目录下增加 vendor 文件,所有依赖包副本形式放在$ProjectRoot/vendor Pasted image 20230116205506.png
        • 依赖寻址方式: vendor => GOPATH
      • 方式
        • 通过每个项目引入一份依赖的副本,解决了多个项目需要同一个 package依赖的冲突问题