今天偶然看见一段Python大神写的代码,觉得好厉害,我在想go是不是也能实现一样的方法
问题描述:
今天在维护一个别人写的Python项目,改一个接口,去看了一下项目里面封装了一个方法特别好用,这个方法是数据库层面的,接收四个参数,第一个参数是model实体类,第二个参数是查询成功后需要返回数据的那些字段的一个配置是一个字典类型,第三个参数是区间筛选需要对哪个字段进行区间筛选也是一个字典,四个参数是排序规则也是一个字段,并且这个方法适用于任何一个model实体,第一个参数必传,后面的随意
该方法在返回的时候还自动转成了json,key对应model的字段名 value对应model该字段的值,我在想go怎么封装类似这样的方法
具体项目涉密我就不截图代码了,我说一下大概实现的一个方法
假设我有一个user表
class User(Base):
__tablename__ = 'approval_favourable'
id = Column(BigInteger(), primary_key=True)
username = Column(String())
password = Column(String())
nickname = Column(String())
addtime = Column(Datetime())
假设我有一个query_db()的方法
def query_db(entity_model,query_dict,Interval,sort)
这个方法接口四个参数,第一个
当我只传一个参数的时候
query_db(User)
返回的结果是这样
[
{
"id":1,
"username":"admin",
"password":"admin",
"nickname":"admin",
"addtime":"20200101"
},
{
"id":2,
"username":"admin",
"password":"admin",
"nickname":"admin",
"addtime":"20200102"
},
{
"id":3,
"username":"admin",
"password":"admin",
"nickname":"admin",
"addtime":"20200103"
}
]
当我传两个参数的时候
query_dict=[
{
"field_name":"username"
}
]
query_db(User,query_dict)
返回的结果是这样的
[
{
"username":"admin"
},
{
"username":"admin"
},
{
"username":"admin"
}
]
当我传三个参数的时候
query_dict=[
{
"field_name":"username"
},
{
"field_name":"addtime"
}
]
Interval=[
{
"field_name":"addtime",
"max_value":"这里是时间戳",
"min_value":"这里是时间戳"
}
]
query_db(User,query_dict,Interval)
返回的结果是这样的
[
{
"username":"admin",
"addtime":"20200101"
},
{
"username":"admin",
"addtime":"20200102"
}
]
当我传四个参数的时候
query_dict=[
{
"field_name":"username"
},
{
"field_name":"addtime"
},
{
"field_name":"id"
}
]
Interval=[
{
"field_name":"addtime",
"max_value":"这里是时间戳",
"min_value":"这里是时间戳"
}
]
sort=[
{
"field_name":"id",
"sort":"desc"
}
]
query_db(User,query_dict,Interval,sort)
返回的结果是这样的
[
{
"id":2,
"username":"admin",
"addtime":"20200102"
},
{
"id":1,
"username":"admin",
"addtime":"20200101"
}
]
如果用go语言去实现应该怎么实现呢?
封装的方法适用所有的model实体