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

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

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

Go
不负相思意 2022-09-05 17:30:45
var cache atomic.Valuefunc 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//ToInterfaceMapfunc (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
查看完整描述

2 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

在测试文件中创建简单的函数以输入,并在函数内部,将这些值写入并强制转换为键入并返回引用。示例如下。map[string]stringsync.MapInterfaceMap


func 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,

},


查看完整回答
反对 回复 2022-09-05
?
catspeake

TA贡献1111条经验 获得超0个赞

要传入 一个 ,它需要被这样定义。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-


查看完整回答
反对 回复 2022-09-05
  • 2 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信