Go中执行的函数片的错误处理

时间:2017-08-02 16:37:42

标签: go

我必须在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

此外,任何建议都将受到赞赏。

1 个答案:

答案 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)
        ....

您可以在错误中包含您的数据。

相关问题