为了账号安全,请及时绑定邮箱和手机立即绑定

如果仅更改一种参数类型,请避免代码重复

如果仅更改一种参数类型,请避免代码重复

Go
杨魅力 2022-06-13 15:18:21
如您所见,这些功能仅在keys []int和keys []*int(以及名称)上有所不同。func (db *myDB) QueryWithKeys(keys []int) ([]*models.Player) {    var players = make([]*models.Player, len(keys))  _ := db.Model(&players).Where("id in (?)", pg.In(keys)).Select()  // several other equal code here    return players}func (db *myDB) QueryWithPointerKeys(keys []*int) ([]*models.Player) {    var players = make([]*models.Player, len(keys))    _ := db.Model(&players).Where("id in (?)", pg.In(keys)).Select()  // several other equal code here    return players}有没有办法避免这种代码重复?
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

您可以重新定义方法以接受keys类型参数interface{}以及指示参数底层切片中元素数量的length类型参数,此长度将由调用者提供。intkeys


func (db *myDB) QueryWithKeys(keys interface{}, length int) ([]*models.Player) {

    var players = make([]*models.Player, length)

    _ := db.Model(&players).Where("id in (?)", pg.In(keys)).Select()

    // several other equal code here

    return players

}

有了它,您就可以像这样使用它:


var keys []int = // get list of integers from wherever

players := db.QueryWithKeys(keys, len(keys))


var keys2 []*int = // get list of integer pointers from wherever

players2 := db.QueryWithKeys(keys2, len(keys2))


查看完整回答
反对 回复 2022-06-13
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

您可以做的是让 QueryWithKeys 方法调用 QueryWithPointerKeys 方法,然后放入一个指向键整数的指针。明显的缺点是处理时间会更长一些。



查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号