V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
azev
V2EX  ›  问与答

go 中怎么声明动态类型的 slice?

  •  
  •   azev · 2022-08-24 16:48:04 +08:00 · 691 次点击
    这是一个创建于 611 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想要这样做 不知道能不能行?
    types := map[string]interface{}{"User": User{}, "Order": Order{}}
    var items = ???types["User"]???
    db.Find(&items)
    6 条回复    2022-08-25 11:53:28 +08:00
    Morriaty
        1
    Morriaty  
       2022-08-24 17:07:45 +08:00
    gorm 官网文档有个公共属性的例子,就是「裤子」「头盔」都是「商品」
    azev
        2
    azev  
    OP
       2022-08-24 18:30:54 +08:00
    @Morriaty 这会不清楚怎么弄出这个 [商品] 传进去
    azev
        3
    azev  
    OP
       2022-08-24 22:39:26 +08:00
    测试了下
    types := map[string]interface{}{"User": User{}, "Order": Order{}}
    var items = reflect.SliceOf(reflect.TypeOf(types["User"]))
    db.Find(&items)
    这样编译和运行都没有报错 但是没有进去数据
    azev
        4
    azev  
    OP
       2022-08-24 23:25:25 +08:00
    改了下
    var items = reflect.New(reflect.SliceOf(reflect.TypeOf(dictTypes["User"]))).Interface()
    这样就可以写入数据了
    新问题是 range items 循环报错
    yaott2020
        5
    yaott2020  
       2022-08-25 08:47:18 +08:00 via Android
    []interface{} 这样?
    qianxiaoxiao
        6
    qianxiaoxiao  
       2022-08-25 11:53:28 +08:00
    反射吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2775 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:50 · PVG 11:50 · LAX 20:50 · JFK 23:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.