gpt4 book ai didi

go - 如何使 Go append 在范围循环内工作

转载 作者:数据小太阳 更新时间:2023-10-29 03:41:14 24 4
gpt4 key购买 nike

我有这个函数,它从一个结构中获取未知数量的输入:

func GetAllXXXByQueryFilters(ctx context.Context, filters ...XXXFilters) ([]XXX, error) {
var allKeys []*datastore.Key
var xxx []XXX
for _, filter := range filters {
query := datastore.NewQuery("XXX")
if filter.Foo != "" {
query = query.Filter("foo =", filter.Foo)
}
if filter.Bar != "" {
query = query.Filter("bar =", filter.Bar)
}
keys, err := models.DSClient().GetAll(ctx, query, &xxx)
if err != nil {
return nil, err
}
allKeys = append(keys) // PROBLEM HERE
}
for i, key := range allKeys {
xxx[i].ID = key.ID
}
return xxx, nil
}

问题是 allKeys 会覆盖之前的查询结果。我以前通过以下方式解决了这个问题:

keys1, err := models.DSClient().GetAll(ctx, query1, &xxx)
keys2, err := models.DSClient().GetAll(ctx, query2, &xxx)
keys = append(keys1, keys2...)

但我希望我的 GetAllXXXByQueryFilters 更复杂并避免重复代码,现在我似乎无法弄清楚如何存储 for _, filter := range filters 中的键循环,然后将它们全部追加。所以我希望也许有一种更聪明的方法来执行/替换 allKeys = append(keys) 行,这样它就不会覆盖以前的键?

最佳答案

像这样附加到 slice :

allKeys = append(allKeys, keys...) 

要追加的第一个参数是 slice 。其余参数是要附加到 slice 的元素。 append 函数返回新的 slice 。

关于go - 如何使 Go append 在范围循环内工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43835217/

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