我不想拥有多个 API 获取函数,而是想创建一个函数来获取适当的数据库,将其格式化为一个结构切片,然后返回它。以下是我的代码的简化版本:
type Person struct {
Name string `json:"name"`
IsCool bool `json:"is_cool"`
}
type Pet struct {
Name string `json:"name"`
IsFluffy bool `json:"is_fluffy"`
}
type Group struct {
Name string `json:"name"`
CreationDate time.Time `json:"creation_date"`
}
type generic interface{}
func FetchDB(dbName string) interface {
var collection []generic
var model generic
switch dbName {
case "users":
collection = new([]User)
model = new(User)
}
case "pets":
collection = new([]Pet)
model = new(Pet)
case "groups":
collection = new([]Group)
model = new(Group)
default:
return nil
}
iter := client.DB(dbName).Get()
for {
entry, err := iter.Next()
if err != nil {
break
}
entry.ToStruct(&model)
collection = append(collection, model)
}
return collection
}
但是,调用此函数会导致cannot use new([]User) (type *[]User) as type []generic in assignment. 我的第一个问题是如何创建“通用”切片并为其分配类型。我的第二个问题是,这是否是设置这个功能的正确方法——使用generic界面感觉很hacky!——如果不是,那么设计这个功能的更明智的方法是什么。
炎炎设计
相关分类