evh

package
v0.5.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 23, 2023 License: MIT Imports: 2 Imported by: 0

README

eventhub

Subscribe/Publish event in program.

这是什么?

  • 这是一个开源的用于golang程序内部发布和监听事件的package,其原理是通过定义一个全局变量存储监听的事件id和对应的handle函数,当发布事件时,通过事件id查找对应的handle,如果找到则执行该handle函数。

使用说明

安装

go get github.com/jageros/eventhub

使用
监听事件
  • seq := eventhub.Subscribe(eventID, handle)
  • eventID为事件id, 返回的seq为序列号,两者都是int型, handle原型为func(args ...interface{}){},args参数类型为interface{}型,通过事件发布函数传入
发布事件
  • eventhub.Publish(eventID, arg1, arg2 ··· )
  • eventID为事件id, argx为参数,将传给事件监听的handle
取消监听
  • Unsubscribe(eventID int, seq int)
  • eventID为事件id, seq为序列号,序列从监听事件函数返回值获得
使用示例

github.com/jageros/eventhub/example/main.go

package main

import (
	"fmt"
	"github.com/jageros/eventhub"
)

func main() {
	// 监听事件
	eventhub.Subscribe(2, func(args ...interface{}) {
		fmt.Printf("Subscribe1 eventId=2 args=%v\n", args)
	})
	eventhub.Subscribe(1, func(args ...interface{}) {
		fmt.Printf("Subscribe2 eventId=1 args=%v\n", args)
	})
	eventhub.Subscribe(3, func(args ...interface{}) {
		fmt.Printf("Subscribe3 eventId=3 args=%v\n", args)
		if arg, ok := args[0].(func()); ok {
			arg()
		}
	})

	// 监听并取消监听
	seq := eventhub.Subscribe(1, func(args ...interface{}) {
		fmt.Printf("Subscribe4 eventId=1 args=%+v\n", args)
	})
	eventhub.Unsubscribe(1, seq)

	// 发布事件
	eventhub.Publish(1, 10, 100)
	eventhub.Publish(2, 20, 200)
	eventhub.Publish(3, test)
}

// 此函数用作参数
func test() {
	fmt.Printf("End!\n")
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Publish

func Publish(eventID int, args ...interface{})

Publish ******************************************

  • func: 发布事件
  • eventID 事件id
  • args 给handle传的参数
  • return nil ******************************************

func Subscribe

func Subscribe(eventID int, handler func(args ...interface{})) (seq int)

Subscribe ***************************************************************

  • func:监听事件函数
  • eventID: 事件id
  • handler: 事件函数
  • return seq : 该事件当前handle的序列号, 用于取消监听时参数 **************************************************************

func Unsubscribe

func Unsubscribe(eventID int, seq int)

Unsubscribe ************************************

  • func: 取消监听
  • eventID 事件ID
  • seq 事件序列号 (ps:因为一个事件可能存在多个handle函数)
  • return nil ************************************

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL