我必须在for循环中运行未知数量的函数,并且当出现错误时(当错误从其中一个返回时)我想创建有意义的错误。
这里有一些代码:
package storage
import (
"github.com/attilasatan/ankara/engine/indexer"
)
type NewHandler func(*indexer.Document) error
var NewHandlers []NewHandler
func AppendNewHandler(handler NewHandler) {
NewHandlers = append(NewHandlers, handler)
}
func New(document *indexer.Document) (err error) {
for i, handler := range NewHandlers {
err = handler(document)
if err != nil {
err = errors.New(`New Handler error at index ` + string(i) + `
original:
` + err.Error())
return
}
}
return
}
这是我的错误处理解决方案,但我对此感到不舒服,因为我只返回我执行的函数的索引。
我的问题是。我是否可以收集有关返回的函数的更多信息,而不是error
。
此外,任何建议都将受到赞赏。
答案 0 :(得分:1)
使用包含func和任何元数据的结构,而不仅仅是一个func。这样的事情。
type NewHandler struct {
Handler func(*indexer.Document) error
Data string // or whatever data
}
还要确保切片保存指针,因为go是按值传递。
var NewHandlers []*NewHandler
然后当你进行循环时,它会像这样。
for i, handler := range NewHandlers {
err = handler.Handler(document)
....
您可以在错误中包含您的数据。