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

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^)


人到中年有点甜
浏览 89回答 1
1回答

一只甜甜圈

您希望在 以下位置为地图编制索引:reflect.Typetype 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go