青训营X豆包MarsCode Go语言入门2 | 豆包MarsCode AI 刷题

27 阅读3分钟

上一篇文章介绍了一下go的协程基础的东西,现在可以用他来处理并行了

处理并行任务

sync.WaitGroup 是 Go 标准库中的一个结构体,属于 sync 包,专门用于管理并发的 goroutine 任务。它能够跟踪一组并发任务的执行情况,并在所有任务都完成后继续执行主程序。其主要应用场景是 等待一组 goroutine 全部执行完成 后再继续主线程的操作,确保不会在任务未完成时就退出或进行后续步骤。

sync.WaitGroup 主要有三个方法:

  1. Add(int):用于设置(增加)需要等待的 goroutine 数量。例如 wg.Add(2) 表示需要等待两个 goroutine 完成。
  2. Done():用于通知 WaitGroup 一个任务已经完成,Add 中的计数会减 1。通常在 goroutine 中调用 wg.Done() 表示当前 goroutine 完成了任务。
  3. Wait():用于阻塞主 goroutine(或者启动 Wait 的 goroutine),直到所有添加的任务数减为 0。即所有调用 Add 增加的任务,都调用 Done 完成后才会继续执行。
func main() {
	var wg sync.WaitGroup // 创建一个 WaitGroup
	// 开启两个并行操作
	wg.Add(2) // 增加两个等待任务
	
	// 使用 goroutine 并行执行 translatejingshan 和 translate
	go func() {
		defer wg.Done() // 确保执行完成时调用 Done
		fmt.Println("translate from jingshan")
		translatejingshan(word)
	}()

	go func() {
		defer wg.Done() // 确保执行完成时调用 Done
		fmt.Println("translate from caiyun")
		translate(word)
	}()

	// 等待两个 goroutine 完成
	wg.Wait()

	// 程序结束
	fmt.Println("All translations completed.")
}

中间件的定义

中间件(Middleware)是一种位于应用程序与操作系统、网络之间的计算机程序,它为系统提供支持性服务,通常用于连接不同的软件组件或应用程序。中间件的作用是实现不同软件、硬件或系统之间的通信和数据管理。

在Web开发中,中间件通常指的是在客户端和服务器之间处理请求的代码或功能,它可以在请求到达最终处理器之前、或者在响应返回客户端之前,进行一系列操作,例如:

  • 处理身份验证和授权(如检查用户是否登录)
  • 日志记录(如记录每个请求的详细信息)
  • 错误处理(如捕获并处理应用中的错误)
  • 请求解析(如解析请求的body或参数)
  • 响应修改(如添加跨域资源共享CORS头部)

在许多框架中,中间件是一个功能模块的集合,执行顺序一般是由开发者配置的。例如,在Node.js中使用Express框架时,可以通过app.use()来添加中间件,而在Spring Boot中,过滤器和拦截器也可以视作中间件的一部分。

总结来说,中间件就是在处理请求和响应过程中起到辅助作用的“桥梁”部分

go包

我们要使用别的go代码中的要导包,就是导入你要用的那个模块的文件夹,一个文件夹被认为是一个包

  • 在mod中的require导入第三方包
  • 在module后定义自己程序的包名
module github.com/Moonlight-Zhao/go-project-example

go 1.16

require (
	github.com/gin-gonic/gin v1.3.0 // indirect
)

那么我之后要调用某个自己定义的包就是通过项目的名称加上文件夹的名字 "github.com/Moonlight-Zhao/go-project-example/handler" 前面的是module定义名称,后面的handler是文件夹名,导入之后你可以调用这个文件夹下所有go文件中的函数

结构体(类)定义与方法

在 Go 中,结构体(struct)是用来定义一组相关数据的类型。虽然 Go 没有传统的面向对象编程语言中的类(class)概念,但可以通过结构体和方法来模拟类似的功能。方法是绑定到结构体上的函数。

go.work

就是可以把多个go项目串联起来