我正在编写允许从数据库访问数据的代码。但是,我发现自己对相似的类型和字段重复相同的代码。我该如何为它编写通用函数?例如我想实现的目标...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 {}切片并执行另一个强制转换。
- 2 回答
- 0 关注
- 177 浏览
添加回答
举报
0/150
提交
取消