亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

因為發(fā)送郵件是個比較耗時的操作,

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

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

pool包下的pool.go文件

package pool

import "log"
//具體任務,可以傳參可以自定義操作
type Task struct {
    Args interface{}
    Do func(interface{})error
}
//協(xié)程的個數(shù)
var Nums int
//任務通道
var JobChannels =make(chan Task)
//入口的任務通道
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)
}
//實際的工作協(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測試文件

package test
import (
    "errors"
    "gofly/pool"
    "log"
    "testing"
    "time"
)
//真正的模擬發(fā)送郵件
func SendEmail(email interface{})error{
    log.Println(email," start..")
    //模擬耗時
    time.Sleep(time.Second*10)
    return errors.New(email.(string)+" end..")
}
//獲取郵箱并發(fā)送
func GetEmails(){
    //如果數(shù)據(jù)量比較大分頁獲取
    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個協(xié)程
    pool.Nums = 5
    //開個子協(xié)程去不停的獲取郵箱
    go GetEmails()
    //執(zhí)行
    pool.Run()
}

執(zhí)行go test -v pool_test.go , 效果

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

相關文章

  • Golang學習筆記(三):控制流

    Golang學習筆記(三):控制流

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

    Go?Redis客戶端使用的兩種對比

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

    大多數(shù)Go程序員都走過的坑盤點解析

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

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

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

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

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

    使用Go語言開發(fā)短鏈接服務的方法

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

    Go語言進行多時區(qū)時間轉(zhuǎn)換的示例代碼

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

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

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

    Go結構體的基本使用詳解

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

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

    下面小編就為大家?guī)硪黄褂胓o語言解析xml的實現(xiàn)方法(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論