Golang 并发编程Demo1
时间:2025-1-10 15:10 作者:杨佳乐 分类: Golang
package main
import "fmt"
import "sync"
// 并发demo1
// 假如我正在写一个响应用户信息的接口,这个接口需要获取用户基本信息、余额明细这两个比较耗时的操作
// 此时可以通过goroutine开启两个线程,同时处理获取这两个数据的操作,都获取完了以后组合数据响应
func main(){
fmt.Println(getUserData())
}
// 定义一个用户数据结构体
type UserData struct{
BaseInfo string
BalanceInfo string
}
// 获取用户基本信息函数
func getBaseInfo(ch chan<- string){
ch <- "张三"
}
//获取用户余额信息函数
func getBalanceInfo(ch chan<- string){
ch <- "余额"
}
func getUserData() UserData {
// 定义一个WaitGroup 等待所有任务执行完成
var wg sync.WaitGroup
ch1 := make(chan string)
ch2 := make(chan string)
wg.Add(1)
go func(){
defer wg.Done()
getBaseInfo(ch1)
}()
wg.Add(1)
go func(){
defer wg.Done()
getBalanceInfo(ch2)
}()
udata := UserData{
BaseInfo: <-ch1,
BalanceInfo: <-ch2,
}
//wg.Wait 需要放在接收数据后面,否则会导致死锁,因为wg Wait是阻塞的,放在后面,没有接收通道数据
wg.Wait()
return udata
}