一段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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值