go后端笔记1 | 豆包MarsCode AI刷题

42 阅读3分钟

一、高并发编程

在后端开发中,高并发处理能力至关重要。Go 语言为我们提供了强大的工具来应对高并发场景。

(一)协程

协程是 Go 语言实现高并发的关键特性之一。与传统的线程相比,协程更加轻量级,创建和销毁的开销极小。通过 go 关键字就可以轻松启动一个协程,例如:

go

复制

go func() {
    // 协程内执行的代码
}()

(二)Channel

Channel 是一种引用类型,用于协程之间的通信和同步。我们可以使用 make 函数创建一个 Channel,例如 xiecheng := make(chan int, 2),这里的 2 表示带缓冲的 Channel。通过 <- 操作符可以向 Channel 发送和接收数据,如 xiecheng <- number 就是向 xiecheng 这个 Channel 发送数据。Channel 能够保证数据在协程间传递的顺序性,并且在多协程环境下实现并发安全,当然传统的加锁机制在某些场景下也可用于并发控制,但 Channel 提供了一种更优雅高效的方式。

(三)阻塞控制

  1. Sleep:可以让当前协程暂停执行一段时间,例如 time.Sleep(time.Second) 会让协程暂停 1 秒。但在高并发场景中,过度使用 Sleep 可能会影响性能和响应速度。

  2. WaitGroup:用于等待一组协程执行完成。首先通过 wg.Add(5) 来设置需要等待的协程数量,然后在每个协程的末尾使用 defer wg.Done() 来标记协程执行结束,最后通过 wg.Wait() 阻塞主协程,直到所有被等待的协程都执行完毕。例如:

go

复制

var wg sync.WaitGroup
wg.Add(5)
// 实际执行,假设这里是一个循环启动 5 个协程
for i := 1; i <= 5; i++ {
    go func(i int) {
        defer wg.Done()
        // 协程内的具体业务代码
    }(i)
}
wg.Wait()

二、依赖管理

在 Go 项目开发中,依赖管理是保证项目正常运行和可维护性的重要环节。

(一)GOPATH 环境变量

GOPATH 是 Go 早期的依赖管理方式,它指定了项目的工作目录,包括源代码、编译后的二进制文件以及依赖包的存放路径。然而,随着项目的复杂和依赖的增多,GOPATH 的管理方式逐渐暴露出一些局限性。

(二)Go Vender

Go Vender 是一种将项目依赖包本地化的方式,每个项目可以在其根目录下创建 vendor 文件夹,将依赖的包复制到该文件夹中。这样可以在一定程度上解决依赖版本冲突的问题,但对于多项目共享依赖和依赖更新管理仍然不够便捷。

(三)go.mod

go.mod 是现代 Go 项目中常用的依赖管理工具,类似于 Java 中的 Maven。首先通过 go mod init 名字 初始化一个 go.mod 文件,它记录了项目的名称、依赖的模块及其版本信息。然后可以使用 go mod download github.com/xxxx 下载指定的依赖包,go mod tidy 命令会自动整理和更新依赖关系,确保依赖的准确性和完整性。