您现在的位置是:网站首页> 编程资料编程资料

golang协程池模拟实现群发邮件功能_Golang_

2023-05-26 341人已围观

简介 golang协程池模拟实现群发邮件功能_Golang_

比如批量群发邮件的功能

因为发送邮件是个比较耗时的操作,

如果是传统的一个个执行 , 总体耗时比较长

可以使用golang实现一个协程池 , 并行发送邮件

pool包下的pool.go文件

 package pool import "log" //具体任务,可以传参可以自定义操作 type Task struct { Args interface{} Do func(interface{})error } //协程的个数 var Nums int //任务通道 var JobChannels =make(chan Task) //入口的任务通道 var Jobs =make(chan Task) //执行 func Run(){ for i:=0;i

具体的使用

test包下的pool_test.go测试文件

 package test import ( "errors" "gofly/pool" "log" "testing" "time" ) //真正的模拟发送邮件 func SendEmail(email interface{})error{ log.Println(email," start..") //模拟耗时 time.Sleep(time.Second*10) return errors.New(email.(string)+" end..") } //获取邮箱并发送 func GetEmails(){ //如果数据量比较大分页获取 page:=1; for{ //模拟每页获取的邮箱 emails:=[]string{ "1@qq.com", "2@qq.com", "3@qq.com", "4@qq.com", "5@qq.com", "6@qq.com", "7@qq.com", } for _,email:=range emails{ var sendEmailTask=pool.Task{ Args: email, Do: SendEmail, } //每个邮箱任务塞入任务通道 pool.Jobs <- sendEmailTask } log.Printf("page %d done!\n",page) page++ } } func TestPool(t *testing.T) { //定义5个协程 pool.Nums = 5 //开个子协程去不停的获取邮箱 go GetEmails() //执行 pool.Run() }

执行go test -v pool_test.go , 效果

到此这篇关于golang协程池模拟实现群发邮件功能的文章就介绍到这了,更多相关golang协程池群发邮件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

-六神源码网