V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
scalaer
V2EX  ›  程序员

最近在学 go, 关于 go 不支持范型

  •  
  •   scalaer · 2019-07-26 11:33:56 +08:00 · 3343 次点击
    这是一个创建于 1982 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前场景: 数据库迁移, 操作就是目标库建表, 源库 select 数据 insert 到目标库

    
    /*
    
    models.go 
    
    */
    
    type xx1 struct {
    
    	id int `db:"id"`
        ...
    }
    
    
    type xx2 struct {
    
    	id int `db:"id"`
        ...
    }
    
    

    我想实现一个 insert 函数, 这样做插入的时候只需要传入 sql

    
    select .... from ...
    
    insert .... 
    

    和对应的 model 的数组, 类似这种实现.

    func InsertTable(selectSql string, insertSql string, soruce *sqlx.DB, target *sqlx.DB, items []T) error {
    	
        ...
        source.Select(&items, selectSql)
        
        target.NamedExec(insertSql, items)
        ...
    }
    

    各位有什么好的的实现办法吗.

    9 条回复    2019-07-26 19:04:31 +08:00
    zmqiang
        1
    zmqiang  
       2019-07-26 11:42:42 +08:00 via iPhone
    两数据 scan 到 interface 里,然后直接将 intreface 作为参数插入
    LeeSeoung
        2
    LeeSeoung  
       2019-07-26 11:43:25 +08:00
    说个跟楼主问题无关的问题。。这样迁移数据库,一是效率慢,二是增加原数据库压力。
    scalaer
        3
    scalaer  
    OP
       2019-07-26 11:44:53 +08:00
    @LeeSeoung 有点业务逻辑
    opentrade
        4
    opentrade  
       2019-07-26 12:30:27 +08:00 via Android
    上次我干这种活是用 dbeaver,把 postgres 里的表导到 sqlite
    reus
        5
    reus  
       2019-07-26 15:05:41 +08:00
    和泛型有什么关系?
    SuperMild
        6
    SuperMild  
       2019-07-26 15:11:43 +08:00
    你随便找个 orm 来用就好了
    scalaer
        7
    scalaer  
    OP
       2019-07-26 16:50:21 +08:00
    @reus 想把 select, insert 逻辑封装下, 参数 items 需要支持不同类型
    chitanda
        8
    chitanda  
       2019-07-26 18:58:29 +08:00 via Android
    @zmqiang interface 用多了,复杂点的逻辑直接 Stack Overflow。
    2pang
        9
    2pang  
       2019-07-26 19:04:31 +08:00
    最近也在学 go,边学边用 go 开发了一个博客网站用来记录学 go 的过程,https://blog.v2start.com
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2727 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:53 · PVG 11:53 · LAX 19:53 · JFK 22:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.