如何分配键,值来映射[接口{}]接口{}?

var cache atomic.Value


func setResToCache(res *utils.InterfaceMap) error {

    resMap := res.ToInterfaceMap()

    val := resMap[constant.key] // constant.key is a constant string

    val, ok := val.(string)

    if !ok {

        return errors.New("type assertion failed")

    }

    someRes := model.someRes{

        Title:    val,

    }

    Cache.Store(someRes)

    return nil

}

关于实用工具。接口地图


type InterfaceMap sync.Map


//ToInterfaceMap

func (im *InterfaceMap) ToInterfaceMap() map[interface{}]interface{} {

    iim := make(map[interface{}]interface{})

    m := (*sync.Map)(im)

    m.Range(func(k, v interface{}) bool {

        iim[k] = v

        return true

    })

    return iim

}


我有一些类似于上面的代码,当我想要编写单元测试时,我有一个问题。


    {

        name: "test",

        args: args{

            res: &utils.InterfaceMap{

                // How to assign k,v here

            },

        },

        wantErr: false,

    },

如何分配键,值?map[interface{}]interface{}


它实际上是,所以我使用断言,但传入的参数是 。map[string]stringmap[interface{}]interface{}


我想向映射中添加一些,以便我可以成功测试代码。string: string


不负相思意
浏览 112回答 2
2回答

小唯快跑啊

在测试文件中创建简单的函数以输入,并在函数内部,将这些值写入并强制转换为键入并返回引用。示例如下。map[string]stringsync.MapInterfaceMapfunc createMockInterfaceMap(in map[string]string) *utils.InterfaceMap{    mockMap := sync.Map{}    for key, value := range in {        mockMap.Store(key, value)    }    iMap := utils.InterfaceMap(mockMap)    return &iMap}{    name: "test",    args: args{        res: createMockInterfaceMap(map[string]string{            `key1`:`value1`,            `key2`:`value2`,        }),    },    wantErr: false,},

catspeake

要传入 一个 ,它需要被这样定义。map[interface{}]interface{}您可以使用如下所示的方式将 a 转换为 a:map[string]stringmap[interface{}]interface{}func MapConvert(mss map[string]string) map[interface{}]interface{} {    ifaceMap := map[interface{}]interface{}{}    for k, v := range mss {        ifaceMap[k] = v    }    return ifaceMap}下面是使用类型定义的示例:type InterfaceMap map[interface{}]interface{}func MapConvert(mss map[string]string) *InterfaceMap {    ifaceMap := InterfaceMap{}    for k, v := range mss {        ifaceMap[k] = v    }    return &ifaceMap}下面是一个完整的运行示例:https://play.golang.org/p/UPKqqZnFis-
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go