go-tricks-1.md 1.0 KB


title: "Go Tricks 1" date: 2022-03-23T16:23:05+07:00

draft: true

Single Interface Function Wrapper

Prototype

interface and its function wrapper defination

// 事件接口
interface IEventHandler {
    DoSomething() int
}

// 單接口的函數 Wrapper
type IEventHandlerWrapper func() int
// 實現事件接口
func (ehw IEventHandlerWrapper)DoSomething() int {
    return ehw()
}

Example

注冊中心

// 注冊事件處理函數
var registered map[string]IEventHandler
func RegisterEvent(ev string, handler IEventHandler) {
    registered[ev] = handler
}

注冊事件處理函數

type SomeLogic struct {}

// implements check
var _ IEventHandler = (SomeLogic*)(nil)

func (sl *SomeLogic) DoSomething() int {
    return 0
}

// register

// 方式1.
RegisterEvent("something", &SomeLogic{})

// 方式2. write inplace.
RegisterEvent("others", IEventHandlerWrapper(func()int{
    return 0
}))

使事件處理函數及其類似的應用場景同時支持 interface implementation 和 lambda