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

我正在编写允许从数据库访问数据的代码。但是,我发现自己对相似的类型和字段重复相同的代码。我该如何为它编写通用函数?


例如我想实现的目标...


type Person{FirstName string}

type Company{Industry string}


getItems(typ string, field string, val string) ([]interface{}) {

    ...

}


var persons []Person

persons = getItems("Person", "FirstName", "John")


var companies []Company

cs = getItems("Company", "Industry", "Software")


紫衣仙女
浏览 178回答 2
2回答

富国沪深

我将对此进行一些扩展,以保持一些附加的类型安全性。而不是critera函数,我将使用收集器函数。// typed output array no interfacesoutput := []string{}// collector that populates our output array as neededfunc 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 {}切片并执行另一个强制转换。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go