一段golang反射和函数相互结合的代码

基于反射确定调用方法
轮寻map确定方法调用
附带返回值

从而实现 基于反射的类操作和处理方法
如果类A则方法A
如果类B则方法B

相对于switch而言,我们可以把map m作为全局变量,实现变量注入

package main

import (
	"fmt"
	"reflect"
)

func goFunc2(f func(interface{
    
    }), i interface{
    
    }) {
    
    
	f(i)
}

func DoString(i interface{
    
    }) string {
    
    
	return "str " + i.(string)
}

func DoOthers(i interface{
    
    }) {
    
    
	fmt.Println("default")
}

func f2(i interface{
    
    }) {
    
    
	var m map[reflect.Type]func(interface{
    
    }) string
	m = make(map[reflect.Type]func(interface{
    
    }) string)
	m[reflect.TypeOf("")] = DoString
	for k, v := range m {
    
    
		if k == reflect.TypeOf(i) {
    
    
			fmt.Println(v(i))
		}
	}
	fmt.Println("f2 done", i)
}

func main() {
    
    
	goFunc2(f2, 100)
	goFunc2(f2, "abc")
}
 go run main.go
f2 done 100
str abc
f2 done abc

猜你喜欢

转载自blog.csdn.net/oe1019/article/details/120926879
今日推荐