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

在Go中编写通用数据访问功能

在Go中编写通用数据访问功能

Go
紫衣仙女 2021-04-28 22:45:14
我正在编写允许从数据库访问数据的代码。但是,我发现自己对相似的类型和字段重复相同的代码。我该如何为它编写通用函数?例如我想实现的目标...type Person{FirstName string}type Company{Industry string}getItems(typ string, field string, val string) ([]interface{}) {    ...}var persons []Personpersons = getItems("Person", "FirstName", "John")var companies []Companycs = getItems("Company", "Industry", "Software")
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

我将对此进行一些扩展,以保持一些附加的类型安全性。而不是critera函数,我将使用收集器函数。


// typed output array no interfaces

output := []string{}


// collector that populates our output array as needed

func collect(i interface{}) {

 // The only non typesafe part of the program is limited to this function

 if val, ok := i.(string); ok {

   output = append(output, val) 

 }

}


// getItem uses the collector  

func getItem(collect func(interface{})) {

    foreach _, item := range database {

        collect(item)

    }

}


getItem(collect) // perform our get and populate the output array from above.

这样做的好处是,不需要调用getItems之后再遍历interface {}切片并执行另一个强制转换。


查看完整回答
反对 回复 2021-05-17
  • 2 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信