婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > golang等待觸發(fā)事件的實(shí)例

golang等待觸發(fā)事件的實(shí)例

熱門標(biāo)簽:不封卡外呼系統(tǒng) 宿遷便宜外呼系統(tǒng)代理商 仙桃400電話辦理 地圖標(biāo)注免費(fèi)定制店 重慶慶云企業(yè)400電話到哪申請 寧波語音外呼系統(tǒng)公司 上海極信防封電銷卡價格 湛江crm外呼系統(tǒng)排名 鄭州智能語音電銷機(jī)器人價格

我就廢話不多說了,大家還是直接看代碼吧~

type Wait interface {
 // Register waits returns a chan that waits on the given ID.
 // The chan will be triggered when Trigger is called with
 // the same ID.
 Register(id uint64) -chan interface{}
 // Trigger triggers the waiting chans with the given ID.
 Trigger(id uint64, x interface{})
 IsRegistered(id uint64) bool
}
 
type list struct {
 l sync.RWMutex
 m map[uint64]chan interface{}
}
 
func Newlist() Wait {
 return list{m : make(map[uint64]chan interface{})}
} 
 
//注冊
func (w *list) Register(id uint64) -chan interface{} {
 w.l.Lock()
 defer w.l.Unlock()
 ch := w.m[id]
 if ch != nil {
  log.Fatal("dup id error")
  return nil
 }
 ch = make(chan interface{},1)
 w.m[id] = ch
 return ch
}
 
//觸發(fā)
func (w *list) Trigger(id uint64, x interface{}) {
 w.l.Lock()
 ch := w.m[id]
 delete(w.m,id)
 w.l.Unlock()
 if ch != nil {
  ch - x
  close(ch)
 }
}
 
//判斷該id是否被注冊
func (w *list) IsRegistered(id uint64) bool {
 w.l.RLock()
 defer w.l.Unlock()
 _,ok := w.m[id]
 return ok
}

示例

var timeOutDuration = time.Minute*10 
func main() {
	list := Newlist()
	rid := uint64(time.Now().UnixNano())
	go func() {
		ch := list.Register(rid)
		fmt.Println("start register:",rid)
		if ch == nil {
			return
		}
		select {
		case x := - ch:
			fmt.Printf("trigger over id:%d,x:%v\n",rid,x)
		case -time.After(timeOutDuration):
			log.Println("timeout error:",rid)
		}
	}()
	time.Sleep(time.Second)
 
	rid2 := uint64(time.Now().UnixNano())
	go func() {
		ch := list.Register(rid2)
		fmt.Println("start register:",rid2)
		if ch == nil {
			return
		}
		select {
		case x := - ch:
			fmt.Printf("trigger over id:%d,x:%v\n",rid2,x)
		case -time.After(timeOutDuration):
			log.Println("timeout error:",rid2)
		}
	}()
 
	go func() {
		time.Sleep(time.Second*5)
		list.Trigger(rid,"Hello")
		time.Sleep(time.Second*3)
		list.Trigger(rid2,"World")
	}()
 
	select {
 
	}
}
 

補(bǔ)充:GO 程序等待一段時間執(zhí)行

我就廢話不多說了,大家還是直接看代碼吧~

package main
import (
 "fmt"
 "time"
)

func main() {
 fmt.Println(time.Now())

 //等1秒
 time.Sleep(time.Second * 1)
 fmt.Println(time.Now())

 //等1秒
 -time.After(time.Second * 1)
 fmt.Println(time.Now())
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Golang中runtime的使用詳解
  • 如何判斷Golang接口是否實(shí)現(xiàn)的操作
  • 淺談golang中的&^位清空操作
  • Golang之defer 延遲調(diào)用操作
  • 解決golang sync.Wait()不執(zhí)行的問題
  • golang執(zhí)行命令操作 exec.Command
  • 對Golang中的runtime.Caller使用說明

標(biāo)簽:安康 物業(yè)服務(wù) 青海 西雙版納 電子產(chǎn)品 遼寧 海南 儋州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang等待觸發(fā)事件的實(shí)例》,本文關(guān)鍵詞  golang,等待,觸發(fā),事件,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang等待觸發(fā)事件的實(shí)例》相關(guān)的同類信息!
  • 本頁收集關(guān)于golang等待觸發(fā)事件的實(shí)例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 枝江市| 瑞昌市| 综艺| 莱阳市| 朝阳县| 进贤县| 西林县| 襄垣县| 绥江县| 城市| 内丘县| 苏尼特右旗| 靖安县| 舟曲县| 德庆县| 沅江市| 高阳县| 宁海县| 特克斯县| 苍梧县| 内乡县| 彭山县| 观塘区| 民和| 本溪| 高碑店市| 玉林市| 县级市| 九台市| 和林格尔县| 雷山县| 黎城县| 五指山市| 黔西县| 平度市| 青岛市| 东兴市| 邯郸市| 林西县| 巧家县| 辰溪县|