为了账号安全,请及时绑定邮箱和手机立即绑定

高浪 如何使用结构名称作为映射键

高浪 如何使用结构名称作为映射键

Go
人到中年有点甜 2022-10-04 15:49:07
type A struct {    a1 int    a2 string}type B struct {    b1 int    b2 string}type C struct {    c1 int    c2 string}有3个结构,我想把名字作为键放到一个映射中,并处理func作为映射值(而不是类型切换)输入 arg 是一个接口,使用 for 循环来判断这个接口的结构是什么。并通过处理映射值中的 func 来处理此参数。大约:var funcMap map[structName]func(arg){A:processA, B:processB, C:processC}func testFunc(arg) {    for k, v in range funcMap {        if k == reflect.TypeOf(arg) {            v(arg)        }    }} 我该如何构建此地图???希望代码,谢谢!(^o^)
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您希望在 以下位置为地图编制索引:reflect.Type

type funcMapType map[reflect.Type]
func(interface{})var funcMap funcMapType

,然后向函数注册类型:

funcMap[reflect.TypeOf(A{})] = func(v interface{}) { log.Println("found A") }

如果您的函数需要修改结构,则需要注册一个指向结构类型的指针:

funcMap[reflect.TypeOf(&A{})] = func(v interface{}) { log.Println("found *A") }

https://play.golang.org/p/LKramgSc_gz


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号