--- 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 ```golang // 事件接口 interface IEventHandler { DoSomething() int } // 單接口的函數 Wrapper type IEventHandlerWrapper func() int // 實現事件接口 func (ehw IEventHandlerWrapper)DoSomething() int { return ehw() } ``` ### Example 注冊中心 ```golang // 注冊事件處理函數 var registered map[string]IEventHandler func RegisterEvent(ev string, handler IEventHandler) { registered[ev] = handler } ``` 注冊事件處理函數 ```golang 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