• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

GO语言进阶和依赖管理 | 青训营

武飞扬头像
黎明77
帮助3

语言进阶

1.0并发Vs并行

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

学新通

并行:多线程程序在多个核的CPU上运行

学新通

GO可以发挥多核优势,高效运行

1.1Goroutine

学新通

协程:用户态,轻量级线程,栈KB级别

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

协程的使用

快速打印hello groutine:0~hello goroutine:4

在调用函数func(j int)前加go这就可以为一个函数创建一个协程来运行

time.sleep(time.second)是为了保证子协程在执行完之前主协程不退出

学新通

1.2CSP

协程之间的通信

学新通

提倡通过通信共享内存而不是通过共享内存实现通信

通过共享内存实现通信在一定程度上会影响程序的性能

1.3Channel

make(chan 元素类型,[缓冲大小])

无缓冲通道 make(chan int)

有缓冲通道 make(chan int,2)

学新通

Channel的使用

A 子协程发送0~9数字

B 子协程计算输入数字的平方

M 主协程输出最后的平方数

学新通

带缓冲的channel可以解决生产和消费速度带来的执行效率问题

1.4并发安全 Lock

对变量执行2000次 1操作,5个协程并发执行

对比加锁和不加锁两种情况的输出

学新通

学新通

加锁讲的是对临界区的权限的一个控制来保证并发安全

1.5waitGroup

go语言中可通过waitgroup实现并发任务的同步

学新通

计数器

开启协程 1;执行结束-1;主程序阻塞直到计数器为0

快速打印hello groutine:0~hello goroutine:4

学新通

依赖管理

2.0背景

学新通

工程项目不可能基于标准库0~1编码搭建

管理依赖库

2.1GO依赖管理演进

学新通

不同环境(项目)依赖的版本不同;控制依赖库的版本

2.1.1 GOPATH

环境变量$GOPATH

bin 项目编译的二进制文件

pkg 项目编译的中间产物

src 项目源码

项目代码直接依赖src下的代码

go get 下载最新版本的包到src目录下

GOPATH的弊端

学新通

V2无法兼容,无法实现package的多版本控制

2.1.2 GO Vender

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

依赖寻址方式:vender——GOPATH

学新通

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

GO Vender的弊端

无法控制的版本

更新项目又可能出现依赖冲突,导致编译错误 学新通

依赖的是项目源码,不能清晰的标识依赖版本

2.1.3 GO Module

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

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

终极目标:定义版本规则和管理项目依赖关系

2.2依赖管理三要素

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

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

3.本地工具 go get/mod

2.3.1依赖配置-go.mod

学新通 依赖标识[Module Path] [Version/Pseudo-version]

2.3.2 依赖配置-version

1.语义化版本:MAJOR(可以不兼容).{MAJOR(可以不兼容)}.{MINOR(在minor下做到前后兼容)}.${PATHE}

2.基于commit伪版本:版本前缀-时间戳—12位哈吉马前缀

2.3.3依赖配置-indirect

学新通

A-B-C

A-B直接依赖

A-C间接依赖

没有直接依赖用indirect标识出来

2.3.4依赖配置-incompatible

学新通

主版本V2 模块会在模块路径增加/vN后缀

对于没有go.mod文件并且主版本V2 的依赖,会 incompatible

学新通

v1.4

选择最低的兼容版本

2.3.5 依赖分发-回源

学新通

无法保证构建的稳定性(加,改,删);无法保证依赖的可用性(删除软件);增加第三方压力

Proxy

学新通

2.3.6依赖分发-变量 GOPROXY

Proxy1——Proxy2——Direct(源站)

2.3.7工具-go get

学新通

2.3.8工具-go mod

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhaiae
系列文章
更多 icon
同类精品
更多 icon
继续加载