GO入门|青训营笔记

42 阅读2分钟

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

一、语言进阶

并发:多线程程序在一个核的cpu上运行。并行:多线程程序在多个核的cpu上运行。

Go 可以充分发挥多核优势,高效运行。

线程:用户态,轻量级线程,栈MB级别。

协程:内核态,线程跑多个协程,栈KB级别。

小结:

这个章节包括三个方面,一个是协程,通过高效的调度模型实现高并发操作,一个是通道channel,通过通信实现共享内存,最后sync相关关键字,实现并发安全操作和协程间的同步。

二、依赖管理

GOPATH

GOPATH是Go语言支持的一个环境变量,value是Go项目的工作区。目录有以下结构:src:存放Go项目的源码;pkg:存放编译的中间产物,加快编译速度;bin:存放Go项目编译生成的二进制文件。

弊端:如果多个项目依赖同一个库,则依赖该库是同一份代码,所以不同项目不能依赖同一个库的不同版本,这很显然不能满足我们的项目依赖需求。

Go Vendor

  • 项目目录下增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor

  • 依赖寻址方式: vendor => GOPATH

通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题。

弊端:1. 无法控制依赖的版本。2.更新项目又可能出现依赖冲突,导致编译出错。

Go Module

  • 通过go.mod文件管理依赖包版本

  • 通过go get/go mod 指令工具管理依赖包

  • 定义版本规则和管理项目依赖关系

依赖管理三要素

1.go.mod——配置文件,描述依赖。

2.Proxy——中心仓库管理依赖库。

3.go get/mod——本地工具。

总结

通过对本次课程的学习,既了解了GO高性能的本质,又了解了GO语言依赖的演进路线,对GO语言有了更进一步的认识。