日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Go事件管理器:簡單實現(xiàn)

來源: 責編: 時間:2023-11-28 09:37:20 223觀看
導讀在編程中,事件管理器是一種常見的工具,用于通過通知來觸發(fā)操作。在Go語言中,我們可以通過創(chuàng)建事件管理器和監(jiān)聽器來實現(xiàn)事件的處理。本文將介紹一個簡單的Go事件管理器的實現(xiàn),并通過異步改進提高其性能。監(jiān)聽器首先,我們需

在編程中,事件管理器是一種常見的工具,用于通過通知來觸發(fā)操作。在Go語言中,我們可以通過創(chuàng)建事件管理器和監(jiān)聽器來實現(xiàn)事件的處理。本文將介紹一個簡單的Go事件管理器的實現(xiàn),并通過異步改進提高其性能。A3828資訊網(wǎng)——每日最新資訊28at.com

監(jiān)聽器

首先,我們需要創(chuàng)建一個監(jiān)聽器。在這個實現(xiàn)中,監(jiān)聽器只是一個接收事件參數(shù)的函數(shù)。A3828資訊網(wǎng)——每日最新資訊28at.com

type Listener[T any] func(T)

事件管理器

事件管理器是一個用于管理事件和監(jiān)聽器的結構。它具有兩個方法:Add和Run。Add方法用于將新的監(jiān)聽器附加到事件上,而Run方法用于執(zhí)行事件管理器。A3828資訊網(wǎng)——每日最新資訊28at.com

type Manager[T any] interface { Add(n string, l Listener[T]) Run()}

抽象事件管理器

為了方便使用,我們可以創(chuàng)建一個抽象事件管理器,它實現(xiàn)了事件管理器接口的一部分通用邏輯。雖然Go語言并不是面向?qū)ο蟮?,但我們可以通過模擬來實現(xiàn)類似的效果。A3828資訊網(wǎng)——每日最新資訊28at.com

type BaseManager[T any] struct { lst map[string][]Listener[T]}func (m *BaseManager[T]) Invoke(n string, args T) { for _, ls := range m.lst[n] {  ls(args) }}func (m *BaseManager[T]) Add(n string, l Listener[T]) { m.lst[n] = append(m.lst[n], l)}

BaseManager提供了Add方法用于添加監(jiān)聽器和Invoke方法用于觸發(fā)指定事件的監(jiān)聽器。A3828資訊網(wǎng)——每日最新資訊28at.com

具體事件管理器

下面是一個具體的事件管理器的示例實現(xiàn):命令事件管理器。該管理器接收用戶從控制臺輸入的命令,并根據(jù)命令類型觸發(fā)相應的事件。A3828資訊網(wǎng)——每日最新資訊28at.com

type Command struct { Kind string Args []string}type CommandEventManager struct { BaseManager[*Command]}func (m *CommandEventManager) Run() { var (  inp  string  args Command ) fmt.Scanln(&inp) cmd := strings.Split(inp, ":") if l := len(cmd); l == 0 {  m.Invoke("no-command", nil) } else if l > 1 {  args.Args = strings.Split(cmd[1], " ") } args.Kind = cmd[0] m.Invoke("any-command", &args) m.Invoke(args.Kind, &args)}func NewCommandEventManager() Manager[*Command] { return &CommandEventManager{  BaseManager: BaseManager[*Command]{lst: make(map[string][]Listener[*Command])}, }}

Run方法獲取用戶從控制臺輸入的命令,并解析命令參數(shù)。如果沒有命令或者命令參數(shù),則觸發(fā)"no-command"事件;否則,觸發(fā)"any-command"事件和具體命令的事件。A3828資訊網(wǎng)——每日最新資訊28at.com

添加監(jiān)聽器

讓我們向命令事件管理器添加一些監(jiān)聽器。A3828資訊網(wǎng)——每日最新資訊28at.com

func main() { cem := NewCommandEventManager() cem.Add("no-command", func(_ *Command) {  fmt.Println("no command was recieved") }) cem.Add("any-command", func(c *Command) {  fmt.Printf("the %s command was executed", c.Kind) }) cem.Add("sum", func(c *Command) {  a, _ := strconv.Atoi(c.Args[0])  b, _ := strconv.Atoi(c.Args[1])  fmt.Printf("the sum result is: %d", a+b) }) cem.Run()}

在上面的示例中,程序只執(zhí)行一次,但你可以將其放在一個無限循環(huán)中以持續(xù)監(jiān)聽命令。A3828資訊網(wǎng)——每日最新資訊28at.com

異步改進

可以將事件管理器的執(zhí)行改為異步方式,以提高性能。每次執(zhí)行事件時,可以將其作為一個goroutine進行處理。甚至可以將每個監(jiān)聽器的執(zhí)行也放在一個goroutine中,以提高并發(fā)性能。A3828資訊網(wǎng)——每日最新資訊28at.com

通過上述改進,我們可以更好地利用Go語言的并發(fā)特性,提高事件處理效率。A3828資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-34683-0.htmlGo事件管理器:簡單實現(xiàn)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 一文搞懂Go gRPC服務Handler單元測試

下一篇: 十個殺手級VS Code插件

標簽:
  • 熱門焦點
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產(chǎn)品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 5月安卓手機好評榜:魅族20 Pro奪冠

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數(shù)據(jù)來源安兔兔評測,收集時間2023年5月1日至5月31日,僅限國內(nèi)市場。第一名:魅族20 Pro好評率:97.50%不得不感慨魅族老品牌還
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團隊做了容器化,但是帶來的問題是服務配置文件很麻煩,然后大家在群里進行了“親切友好”的溝通圖片圖片圖片圖片對比就對比,簡單對比下獨立配置中心和k8s作為配
  • 掘力計劃第 20 期:Flutter 混合開發(fā)的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發(fā)實戰(zhàn)詳解》作者,掘金優(yōu)秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發(fā)的混亂之治。Flutter 基于自研的 Skia 引擎
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己“當家”的盒馬,開始加速謀生了。據(jù)盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • 超閉合精工鉸鏈 徹底消滅縫隙 三星Galaxy Z Flip5與Galaxy Z Fold5發(fā)布

    2023年7月26日,三星電子正式發(fā)布了Galaxy Z Flip5與Galaxy Z Fold5。三星新一代折疊屏手機采用超閉合精工鉸鏈,讓折疊后的縫隙不再可見。同時,配合處
  • iQOO Neo8 Pro即將開售:到手價3099元起 安卓性能最強旗艦

    5月23日,iQOO如期舉行了新品發(fā)布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標準版搭載高通驍龍8+,而Pro版更
  • 回歸OPPO兩年,一加贏了銷量,輸了品牌

    成為OPPO旗下主打性能的先鋒品牌后,一加屢創(chuàng)佳績。今年618期間,一加手機全渠道銷量同比增長362%,憑借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • OPPO K11評測:旗艦級IMX890加持 2000元檔最強影像手機

    【Techweb評測】中端機型用戶群體巨大,占了中國目前手機市場的大頭,一直以來都是各手機品牌的“必爭之地”,其中OPPO K系列機型一直以來都以高品質(zhì)、
Top 主站蜘蛛池模板: 大港区| 郴州市| 通河县| 海盐县| 安国市| 桦南县| 资兴市| 万年县| 秭归县| 北川| 铜川市| 黑水县| 普宁市| 桐城市| 仁布县| 布拖县| 怀仁县| 上林县| 北京市| 高州市| 曲麻莱县| 新干县| 临沭县| 隆昌县| 阿坝县| 沅陵县| 墨竹工卡县| 广州市| 鄂托克前旗| 聂拉木县| 思南县| 兴山县| 宣化县| 综艺| 铜川市| 厦门市| 宜兰市| 临沧市| 龙岩市| 无极县| 龙陵县|