最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ā)郵件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • GoLang中Module的基本使用方法

    GoLang中Module的基本使用方法

    Go module是從Go 1.11版本才引入的新功能,下面這篇文章主要給大家介紹了關于GoLang中Module的基本使用方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • Golang中time.After的使用理解與釋放問題

    Golang中time.After的使用理解與釋放問題

    這篇文章主要給大家介紹了關于Golang中time.After的使用理解與釋放問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-08-08
  • Golang比較兩個slice是否相等的問題

    Golang比較兩個slice是否相等的問題

    本文主要介紹了Golang比較兩個slice是否相等的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Golang并發(fā)操作中常見的讀寫鎖詳析

    Golang并發(fā)操作中常見的讀寫鎖詳析

    Golang中的鎖機制主要包含互斥鎖和讀寫鎖互斥鎖互斥鎖是傳統(tǒng)并發(fā)程序對共享資源進行控制訪問的主要手段,這篇文章主要給大家介紹了關于Golang并發(fā)操作中常見的讀寫鎖的相關資料,需要的朋友可以參考下
    2021-08-08
  • go?doudou應用中使用枚舉類型教程示例

    go?doudou應用中使用枚舉類型教程示例

    這篇文章主要為大家介紹了go?doudou應用中使用枚舉類型教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 解決golang時間字符串轉time.Time的坑

    解決golang時間字符串轉time.Time的坑

    這篇文章主要介紹了解決golang時間字符串轉time.Time的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • go中make用法及常見的一些坑

    go中make用法及常見的一些坑

    golang分配內存主要有內置函數(shù)new和make,下面這篇文章主要給大家介紹了關于go中make用法及常見的一些坑,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • Go時間操作常用方法(推薦!)

    Go時間操作常用方法(推薦!)

    平時開發(fā)過程中,時間相關的操作用的還是很多的,下面這篇文章主要給大家介紹了關于Go時間操作常用方法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • Golang中Model的具體使用

    Golang中Model的具體使用

    本文主要介紹了Golang中Model的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • GoLang調用鏈可視化go-callvis使用介紹

    GoLang調用鏈可視化go-callvis使用介紹

    與鏈路追蹤(Tracing)不同,Tracing關注復雜的分布式環(huán)境中各個服務節(jié)點間的調用關系,主要用于服務治理。而我們本次探索的代碼調用鏈路則是代碼方法級別的調用關系,主要用于代碼設計
    2023-02-02

最新評論

双牌县| 天津市| 屯留县| 松潘县| 巴林左旗| 库尔勒市| 固镇县| 邢台市| 金阳县| 新野县| 泰宁县| 太湖县| 连州市| 长沙市| 贵南县| 平和县| 米易县| 中卫市| 务川| 潞城市| 乐平市| 平舆县| 威远县| 兰坪| 丹东市| 德兴市| 正阳县| 民县| 新丰县| 吉木萨尔县| 丰台区| 伊宁县| 麻栗坡县| 阳城县| 隆德县| 股票| 龙江县| 碌曲县| 姚安县| 合阳县| 玉林市|