代码之家  ›  专栏  ›  技术社区  ›  Victor pozs

绘制具体类型

  •  0
  • Victor pozs  · 技术社区  · 6 年前

    用什么惯用的方法来定义 map[type]interface{} ?

    在我看来 类型 (作为关键字)不是什么东西 可比的 所以不能用作地图中的键。也许我走错了路,所以我会接受任何建议。

    TL;DR;

    榜样激励

    让我们把我的应用程序模型 类型 打电话 ,存储在 桌子 命名 “人” A的 关系数据库管理系统 .

    如果我想链接实体对象 到了 表名 . 根据定义,事情不会一起出现,所以明智的做法是避免用“非自然相关”(这是我的基于Java的面向对象的思想出现的地方)污染人结构[PosivyValue]接收方法,所以地图在这里可以派上用场,对吧?(地图对于将不同世界或集合中的事物关联起来很好,对吧?)

    var tableNameByType map[type]string = map[type]string{
          Person: "person",
    }
    

    这句话使编译器对我大喊大叫 expected type, found 'type' . 我试过使用而不是类型、接口{}和结构,但没有更好的结果。

    提前,谢谢你花时间读我的文章。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Cerise Limón    6 年前

    使用 reflect.Type 作为关键:

    var tableNameByType map[reflect.Type]string = map[reflect.Type]string{
        reflect.TypeOf(Person{}): "person",
    }
    

    可以使用以下命令获取类型的名称:

    name := tableNameByType[reflect.TypeOf(Person{})]
    

    …或价值的名称 v 使用:

    name := tableNameByType[reflect.ValueOf(v).Type()]
    

    您可以通过替换 reflect.TypeOf(Person{}) 具有 reflect.TypeOf((*Person)(nil)).Elem() 在上面的代码中。