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

2019-07-26 11:33:56 +08:00
 scalaer

目前场景: 数据库迁移, 操作就是目标库建表, 源库 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)
    ...
}

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

3311 次点击
所在节点    程序员
9 条回复
zmqiang
2019-07-26 11:42:42 +08:00
两数据 scan 到 interface 里,然后直接将 intreface 作为参数插入
LeeSeoung
2019-07-26 11:43:25 +08:00
说个跟楼主问题无关的问题。。这样迁移数据库,一是效率慢,二是增加原数据库压力。
scalaer
2019-07-26 11:44:53 +08:00
@LeeSeoung 有点业务逻辑
opentrade
2019-07-26 12:30:27 +08:00
上次我干这种活是用 dbeaver,把 postgres 里的表导到 sqlite
reus
2019-07-26 15:05:41 +08:00
和泛型有什么关系?
SuperMild
2019-07-26 15:11:43 +08:00
你随便找个 orm 来用就好了
scalaer
2019-07-26 16:50:21 +08:00
@reus 想把 select, insert 逻辑封装下, 参数 items 需要支持不同类型
chitanda
2019-07-26 18:58:29 +08:00
@zmqiang interface 用多了,复杂点的逻辑直接 Stack Overflow。
2pang
2019-07-26 19:04:31 +08:00
最近也在学 go,边学边用 go 开发了一个博客网站用来记录学 go 的过程,https://blog.v2start.com

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/586373

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX