http.HandleFunc 的實現
阿新 • • 發佈:2018-12-18
簡單記錄以下,重點是以下這段程式碼:
這段程式碼 通過 HandlerFunc
實現了普通函式轉Handler
介面。
type Handler interface {
Do(k, v interface{})
}
type HandlerFunc func(k, v interface{})
func (f HandlerFunc) Do(k, v interface{}) {
f(k, v)
}
以下是完整程式碼。
package main
import (
"fmt"
)
type Handler interface {
Do(k, v interface{})
}
type HandlerFunc func(k, v interface{})
func (f HandlerFunc) Do(k, v interface{}) {
f(k, v)
}
func Each(m map[interface{}]interface{}, h Handler) {
if m != nil && len(m) > 0 {
for k, v := range m {
h.Do(k, v)
}
}
}
func EachFunc(m map[interface{}]interface{}, f func(k, v interface {})) {
Each(m, HandlerFunc(f))
}
func selfInfo(k, v interface{}) {
fmt.Printf("大家好,我叫%s,今年%d歲\n", k, v)
}
func main() {
persons := make(map[interface{}]interface{})
persons["張三"] = 20
persons["李四"] = 23
persons["王五"] = 26
EachFunc(persons, selfInfo)
}