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 为函数打桩

基准测试:

  • 优化代码,需要对当前代码分析
  • 内置的测试框架提供了基准测试的能力
相关文章
|
10天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
30 2
|
8天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
19 2
|
8天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
21 2
|
3天前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
16 4
|
3天前
|
缓存 监控 前端开发
在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统
本文深入探讨了在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统。
27 1
|
6天前
|
Go
go语言中的continue 语句
go语言中的continue 语句
17 3
|
7天前
|
安全 Go 调度
探索Go语言的并发模型:goroutine与channel
在这个快节奏的技术世界中,Go语言以其简洁的并发模型脱颖而出。本文将带你深入了解Go语言的goroutine和channel,这两个核心特性如何协同工作,以实现高效、简洁的并发编程。
|
8天前
|
Go
go语言中的 跳转语句
【11月更文挑战第4天】
17 4
|
8天前
|
JSON 安全 Go
Go语言中使用JWT鉴权、Token刷新完整示例,拿去直接用!
本文介绍了如何在 Go 语言中使用 Gin 框架实现 JWT 用户认证和安全保护。JWT(JSON Web Token)是一种轻量、高效的认证与授权解决方案,特别适合微服务架构。文章详细讲解了 JWT 的基本概念、结构以及如何在 Gin 中生成、解析和刷新 JWT。通过示例代码,展示了如何在实际项目中应用 JWT,确保用户身份验证和数据安全。完整代码可在 GitHub 仓库中查看。
40 1
|
1天前
|
存储 Go PHP
Go语言中的加解密利器:go-crypto库全解析
在软件开发中,数据安全和隐私保护至关重要。`go-crypto` 是一个专为 Golang 设计的加密解密工具库,支持 AES 和 RSA 等加密算法,帮助开发者轻松实现数据的加密和解密,保障数据传输和存储的安全性。本文将详细介绍 `go-crypto` 的安装、特性及应用实例。
11 0