我有一个典型的函数,该函数从前端接收发布请求,然后将数据解码为结构,以便将其放入psql数据库。您可以在下面看到代码。我的问题是我希望能够抽象化此函数,以便可以为它提供任意数量的任何类型的变量,这样对于每个请求,我都不必拥有单独的写处理程序。
这看起来很困难,因为我必须以某种方式传递一种抽象with newest_MEAS as (
select ROAD_ID, MEAS.m, max(year) y
from road_events
join (select rownum -1 m
from dual
connect by rownum -1 <= (select max(TOTAL_ROAD_LENGTH) from road_events) ) MEAS
on MEAS.m between FROM_MEAS and TO_MEAS
group by ROAD_ID, MEAS.m )
select re.event_id, nm.ROAD_ID, re.total_road_length, nm.y, count(nm.m) EVENT_LENGTH
from newest_MEAS nm
join road_events re
on nm.ROAD_ID = re.ROAD_ID
and nm.m between re.from_meas and re.to_meas -1
and nm.y = re.year
group by re.event_id, nm.ROAD_ID, re.total_road_length, nm.y
order by event_id
的方式以用于任何结构。如果golang具有某种eval字符串方法,我会知道该怎么做,但是如果我错了,有人可以纠正我,但我认为不会。
我需要更改的另一个地方是QueryRow-我必须能够以可变数量的变量传递它。我可以很容易地构造字符串,但是我不确定如何将变量附加到该QueryRow中。例如,如果我将所有变量附加到数组,则无法将该数组传递到QueryRow中,因为这不是它的结构方式。同样,这里的一些eval语句会有所帮助。
我对golang并不陌生,但是我已经看到很多与接口相关的很棒的东西,我承认我不太了解。在这里有一种使用界面的方法会有所帮助吗?
感谢任何可以提供帮助的人!
var profitReq profitReq
答案 0 :(得分:2)
您要查找的功能称为泛型。
Go 1.x不支持泛型
对我们来说幸运的是,有一个proposal for them for Go 2 (called Contracts)
在那之前你能做什么?
使用界面
如果您知道此方法将始终通过电子邮件进行查询,则可以为此目的创建简单的界面:type Emailer interface { Email() string }
使用空界面(interface{}
)和反射来找出您拥有的列。
编写您自己的生成器。有点像(1),但您不必自己做。