gpt4 book ai didi

Go:接口(interface)作为返回值

转载 作者:IT王子 更新时间:2023-10-29 02:22:48 35 4
gpt4 key购买 nike

我有几个结构,我用来自 MongoDB 的数据填充。

type Dog struct {
Id string
Age int
}

type Invoice struct {
Id int
Amount float
}

我想做一个这样的函数:

func LookUp(collection string, ids []string) []interface{} {
// Is in cache?
// if not get them from database
}

这样我可以做类似的事情:

 func GoodDogs() []string{
// Give the ids of good dogs
}

dogsIds := GoodDogs()
dogs := LookUp("Dogs", namesToRetrieve)

我知道我可以为每个结构一遍又一遍地编写相同的函数,设置正确的返回类型和 id 类型(注意有些是 int,有些是字符串)但是......似乎太反 DRY。

对于输入,接口(interface)似乎以另一种方式工作。有没有办法做我正在尝试的事情?或者这只是一个错误的设计模式?

最佳答案

将指针作为参数传递给 sice:

func LookUp(collection string, ids []string, result interface{}) error {
// Is in cache?
// if not get them from database
return db.C(collection).Find(bson.M{"_id": bson.M{"$in": ids}}).All(result)
}

这样调用它:

var dogs []*Doc
err := Lookup("dog", dogIds, &dogs)
if err != nil
// handle error
}

关于Go:接口(interface)作为返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39542731/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com