Go语言进阶-工程进阶

简介: Go语言进阶-工程进阶

协程:

协程与进程区别

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

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

使用:

go使用go关键字开启一个协程

csp:

并发提倡通过通信共享内存而非 通过共享内存实现通信

image.png

channel

channel实质上是一个循环队列
有两种初始化:
有缓冲区:make(chan int,n),n代表多少个缓冲区
无缓冲区:make(chan int,0)
当没有缓冲区时channel里面就不能有额外空间存放数据,因此当一个数据放入管道中,必须有数据接收管道里的数据,该进程才会继续向下运行,否则则会一直阻塞。

并发安全lock

go中sync中包中含有读锁和写锁对并发进行安全限制,锁的使用往往对一行操作进行锁操作。而go中对并发安全进行加锁的方式主要用sync包中的Mutex,RWMutex,WaitGroup,Once,Map这几个api进行操作

```
func (m Mutex) Lock() 获取互斥锁
func (m
Mutex) Unlock() 释放互斥锁

func (rw RWMutex) Lock() 获取写锁
func (rw
RWMutex) Unlock() 释放写锁

func (rw RWMutex) RLock() 获取读锁
func (rw
RWMutex) RUnlock() 释放读锁

func (rw *RWMutex) RLocker() Locker 返回一个实现Locker接口的读写锁

func (wg WaitGroup) Add(delta int) 计数器+1
func (wg
WaitGroup) Done() 计数器-1
func (wg *WaitGroup) Wait() 阻塞直到计数器变为0

...

go依赖管理

gopath

bin:项目编译的二进制文件
pkg:项目编译的中间产物,加速编译
src:项目源码

go vender

  • 项目目录下增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor
  • 依赖寻址方式: vendor => GOPATH
  • 通过每个项目引入一份依赖的副本,
    解决了多个项目需要同一个package依赖的冲突问题。
  • 弊端:

image.png

go Module

  • 通过go.mod文件管理依赖包
  • 通过go get/go mod 指令工具管理依赖包
  • 目标:定义版本规则和管理项目依赖关系

    依赖管理三要素:

  • 1.配置文件,描述依赖go.mod
  • 2.中心仓库管理依赖库Pro
  • 3.本地工具 get/modgo

工具:

  • go get

image.png

  • go mod

image.png

测试:

单元测试:

图解:

image.png

规则:

  • 所有测试文件以_test.go结尾

image.png

  • func Testxxx(*testing.T)

image.png

  • 初始化逻辑放在TestMain中

image.png

示例:

image.png

assert

用于纠正错误

代码覆盖率

用于评估项目的测试水准

image.png
用大量测试用例覆盖测试函数的各种情况


  • 一般覆盖率:50%~60%,较高覆盖率80%+。
  • 测试分支相互独立、全面覆盖。
  • 测试单元粒度足够小,函数单一职责。

依赖

  • 幂等
  • 稳定

文件处理示例:

image.png

Mock 为函数打桩

基准测试:

  • 优化代码,需要对当前代码分析
  • 内置的测试框架提供了基准测试的能力
相关文章
|
20天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
64 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
43 7
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
106 71
|
1月前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
110 67
|
5天前
|
监控 安全 算法
深度剖析核心科技:Go 语言赋能局域网管理监控软件进阶之旅
在局域网管理监控中,跳表作为一种高效的数据结构,能显著提升流量索引和查询效率。基于Go语言的跳表实现,通过随机化索引层生成、插入和搜索功能,在高并发场景下展现卓越性能。跳表将查询时间复杂度优化至O(log n),助力实时监控异常流量,保障网络安全与稳定。示例代码展示了其在实际应用中的精妙之处。
27 9
|
14天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
47 12
|
1月前
|
存储 Go
go语言中映射
go语言中映射
42 11
|
17天前
|
监控 算法 安全
解锁企业计算机监控的关键:基于 Go 语言的精准洞察算法
企业计算机监控在数字化浪潮下至关重要,旨在保障信息资产安全与高效运营。利用Go语言的并发编程和系统交互能力,通过进程监控、网络行为分析及应用程序使用记录等手段,实时掌握计算机运行状态。具体实现包括获取进程信息、解析网络数据包、记录应用使用时长等,确保企业信息安全合规,提升工作效率。本文转载自:[VIPShare](https://www.vipshare.com)。
24 0
|
1月前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数