英文:
How to assign key,value to map[interface{}]interface{}?
问题
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("类型断言失败")
}
someRes := model.someRes{
Title: val,
}
Cache.Store(someRes)
return nil
}
关于 utils.InterfaceMap
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{
// 在这里如何分配 k,v
},
},
wantErr: false,
},
如何将键值对分配给 map[interface{}]interface{}
?
实际上它是 map[string]string
,所以我使用断言,但传入的参数是 map[interface{}]interface{}
。
我想向 map 中添加一些 string: string
,以便能够成功测试代码。
英文:
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
}
about utils.InterfaceMap
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
}
I have some code similar to the above, and I have a problem when I want to write a unit test.
{
name: "test",
args: args{
res: &utils.InterfaceMap{
// How to assign k,v here
},
},
wantErr: false,
},
How to how to assign key,value to map[interface{}]interface{}
?
It is actually map[string]string
, so I use assert, but the parameter passed in is map[interface{}]interface{}
.
I want to add some string: string
to map so that I can successfully test the code.
答案1
得分: 2
在你的测试文件中创建一个简单的函数,用于输入map[string]string
。在函数内部,将这些值写入sync.Map
,并将其转换为InterfaceMap
类型,然后返回引用。示例如下:
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,
},
请注意,这只是一个示例代码片段,具体实现可能需要根据你的需求进行调整。
英文:
Create simple function in your test file to input map[string]string
and inside the function, write those values to sync.Map
and cast it to InterfaceMap
type and return the reference. Example is as below.
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,
},
答案2
得分: 1
要将map[string]string
转换为map[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-
英文:
To pass in a map[interface{}]interface{}
, it will need to be defined as such.
You can convert a map[string]string
to a map[interface{}]interface{}
using something like the following:
func MapConvert(mss map[string]string) map[interface{}]interface{} {
ifaceMap := map[interface{}]interface{}{}
for k, v := range mss {
ifaceMap[k] = v
}
return ifaceMap
}
Here's an example using a type definition:
type InterfaceMap map[interface{}]interface{}
func MapConvert(mss map[string]string) *InterfaceMap {
ifaceMap := InterfaceMap{}
for k, v := range mss {
ifaceMap[k] = v
}
return &ifaceMap
}
Here's a full running example:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论