我的代码调用了一个大致如下所示的库函数:
func Search() ([]myLibrary.SomeObject, error) {
var results []apiv17.SomeObject
// ...
if (resultsFound) {
results = append(results, someResult)
}
return results
}
...我的代码调用它,然后将其编组为 JSON。
results, err := myLibrary.Search()
bytes, err := json.Marshal(results)
现在的问题是,由于Search函数的编写方式(假设我们无法更改它),nil如果没有结果,它将返回一个未初始化的切片。不幸的是,没有办法配置encoding/json为将 nil 切片编码为(例如,请参阅正在进行的讨论中的[]此提案)。
明确检查nil解决问题:
results, err := myLibrary.Search()
if results == nil {
results = []apiv17.SomeObject{}
}
bytes, err := json.Marshal(results)
...但它也增加了对返回类型的显式依赖,apiv17.SomeObject. 这很不方便,因为该类型在库中经常更改。例如,在下一个库版本中它可能是apiv18.SomeObject.
通过nil上面的检查,每次发生这种情况时我都必须更新我的代码。
有什么办法可以避免这种情况,并在不显式引用其类型的情况下为变量分配一个空的、非零的切片?是这样的:
results = [](type of results){}
POPMUISE
慕斯王
相关分类