猿问

使用 go,如何将 map[int]T 转换为 map[string]T 以与 JSON 一起使用?

我的代码越来越多的功能如下:


func TransformMapClassA(mapOfIntToClassA map[int]*ClassA) map[string]*ClassA {

  mapOfStringToClassA := make(map[string]*ClassA)

  for id, obj := range mapOfIntToClassA {

    mapOfStringToClassA[fmt.Sprintf("%d" obj.Id)] = obj

  }

  return mapOfStringToClassA

}

为我的应用程序中的每个类编写一次。我正在这样做,所以我可以 json.Marshal 现有地图。有没有一种通用的方法来做到这一点,所以我不必为每个类编写一个函数?我试过做这样的事情:


type Int64JSON int64 `json:",string"`

并在我的原始映射中使用 Int64JSON,但编译器不喜欢类型定义中的 json 标记:(


拉风的咖菲猫
浏览 272回答 2
2回答

鸿蒙传说

有多种方法可以做到这一点。其中之一是使用 generic map[interface{}]interface{},并具有转换功能,例如:func stringMap(m map[interface{}]interface{}) map[string]interface{} {    result := make(map[string]interface{})    for k, v := range m {        result[fmt.Sprint(k)] = v    }    return result   }您也可以使用反射等。也就是说,在做任何这些之前,我会考虑为真正的类型做这件事是否真的有这么多负担。正确键入有几个好处(类型检查、读取时不需要断言、性能、内存使用等),而且代码量相当小。
随时随地看视频慕课网APP

相关分类

Go
我要回答