欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能

 更新時(shí)間:2021年05月02日 07:40:07   作者:陶士涵  
這篇文章主要介紹了golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

比如批量群發(fā)郵件的功能

因?yàn)榘l(fā)送郵件是個(gè)比較耗時(shí)的操作,

如果是傳統(tǒng)的一個(gè)個(gè)執(zhí)行 , 總體耗時(shí)比較長(zhǎng)

可以使用golang實(shí)現(xiàn)一個(gè)協(xié)程池 , 并行發(fā)送郵件

pool包下的pool.go文件

package pool

import "log"
//具體任務(wù),可以傳參可以自定義操作
type Task struct {
    Args interface{}
    Do func(interface{})error
}
//協(xié)程的個(gè)數(shù)
var Nums int
//任務(wù)通道
var JobChannels =make(chan Task)
//入口的任務(wù)通道
var Jobs =make(chan Task)
//執(zhí)行
func Run(){
    for i:=0;i<Nums;i++{
        go worker(i)
    }
    for task:=range Jobs{
        JobChannels<-task
    }
    close(JobChannels)
}
//實(shí)際的工作協(xié)程worker
func worker(workId int){
    for task:=range JobChannels{
        ret:=task.Do(task.Args)
        log.Printf("worker_id:%d , worker_ret:%v\n",workId,ret)
    }
}

具體的使用

test包下的pool_test.go測(cè)試文件

package test
import (
    "errors"
    "gofly/pool"
    "log"
    "testing"
    "time"
)
//真正的模擬發(fā)送郵件
func SendEmail(email interface{})error{
    log.Println(email," start..")
    //模擬耗時(shí)
    time.Sleep(time.Second*10)
    return errors.New(email.(string)+" end..")
}
//獲取郵箱并發(fā)送
func GetEmails(){
    //如果數(shù)據(jù)量比較大分頁(yè)獲取
    page:=1;
    for{
        //模擬每頁(yè)獲取的郵箱
        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,
            }
            //每個(gè)郵箱任務(wù)塞入任務(wù)通道
            pool.Jobs <- sendEmailTask
        }
        log.Printf("page %d done!\n",page)
        page++
    }
}
func TestPool(t *testing.T) {
    //定義5個(gè)協(xié)程
    pool.Nums = 5
    //開(kāi)個(gè)子協(xié)程去不停的獲取郵箱
    go GetEmails()
    //執(zhí)行
    pool.Run()
}

執(zhí)行g(shù)o test -v pool_test.go , 效果

到此這篇關(guān)于golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能的文章就介紹到這了,更多相關(guān)golang協(xié)程池群發(fā)郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang學(xué)習(xí)筆記(三):控制流

    Golang學(xué)習(xí)筆記(三):控制流

    這篇文章主要介紹了Golang學(xué)習(xí)筆記(三):控制流,本文講解了IF、FOR、SWITCH、goto、break、continue等控制流語(yǔ)句的使用實(shí)例,需要的朋友可以參考下
    2015-05-05
  • Go?Redis客戶(hù)端使用的兩種對(duì)比

    Go?Redis客戶(hù)端使用的兩種對(duì)比

    這篇文章主要為大家介紹了Go?Redis客戶(hù)端使用對(duì)比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 大多數(shù)Go程序員都走過(guò)的坑盤(pán)點(diǎn)解析

    大多數(shù)Go程序員都走過(guò)的坑盤(pán)點(diǎn)解析

    這篇文章主要為大家介紹了大多數(shù)Go程序員都走過(guò)的坑盤(pán)點(diǎn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Golang中空的切片轉(zhuǎn)化成 JSON 后變?yōu)?nbsp;null 問(wèn)題的解決方案

    Golang中空的切片轉(zhuǎn)化成 JSON 后變?yōu)?nbsp;null 問(wèn)題的解決方案

    在 Golang 中,經(jīng)常需要將其他類(lèi)型(例如 slice、map、struct 等類(lèi)型)的數(shù)據(jù)轉(zhuǎn)化為 JSON 格式,有時(shí)候轉(zhuǎn)化的結(jié)果并不是預(yù)期中的,例如將一個(gè)空的切片轉(zhuǎn)化為 JSON 時(shí),會(huì)變成"null",所以本文將給大家介紹一下解決方法,需要的朋友可以參考下
    2023-09-09
  • Go?實(shí)現(xiàn)?WebSockets和什么是?WebSockets

    Go?實(shí)現(xiàn)?WebSockets和什么是?WebSockets

    這篇文章主要介紹了Go?實(shí)現(xiàn)?WebSockets和什么是?WebSockets,WebSockets?是構(gòu)建實(shí)時(shí)應(yīng)用程序的第一大解決方案,在線(xiàn)游戲、即時(shí)通訊、跟蹤應(yīng)用程序等,下文相關(guān)內(nèi)容介紹需要的小伙伴可以參考一下
    2022-04-04
  • 使用Go語(yǔ)言開(kāi)發(fā)短鏈接服務(wù)的方法

    使用Go語(yǔ)言開(kāi)發(fā)短鏈接服務(wù)的方法

    短鏈接一般是通過(guò)映射關(guān)系,將長(zhǎng)長(zhǎng)的一串網(wǎng)址,映射到幾個(gè)字符的短鏈接上,建立好這種映射關(guān)系之后保存到數(shù)據(jù)庫(kù)里,用戶(hù)每次訪(fǎng)問(wèn)短鏈接的時(shí)候,這篇文章主要介紹了使用Go語(yǔ)言開(kāi)發(fā)一個(gè)短鏈接服務(wù),需要的朋友可以參考下
    2024-03-03
  • Go語(yǔ)言進(jìn)行多時(shí)區(qū)時(shí)間轉(zhuǎn)換的示例代碼

    Go語(yǔ)言進(jìn)行多時(shí)區(qū)時(shí)間轉(zhuǎn)換的示例代碼

    本文介紹了使用Go語(yǔ)言進(jìn)行多時(shí)區(qū)時(shí)間轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Go語(yǔ)言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用

    Go語(yǔ)言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用

    本文主要介紹了Go語(yǔ)言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Go結(jié)構(gòu)體的基本使用詳解

    Go結(jié)構(gòu)體的基本使用詳解

    本文主要介紹了Go結(jié)構(gòu)體的基本使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 使用go語(yǔ)言解析xml的實(shí)現(xiàn)方法(必看篇)

    使用go語(yǔ)言解析xml的實(shí)現(xiàn)方法(必看篇)

    下面小編就為大家?guī)?lái)一篇使用go語(yǔ)言解析xml的實(shí)現(xiàn)方法(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06

最新評(píng)論