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

I must run an unknown number of functions in a for cycle and I want to create meaningful errors when something goes wrong (when error returns from one of them)

Here some code:

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
}

This is my solution for error handling but i don't feel comfortable with it because I only return the index of the function that I executed.

My question is. Can I collect more information about the function that returned not nil error.

Also any kind of advises would be appreciated.

Use a struct that contains the func and any metadata instead of just a func. Something like this.

type NewHandler struct {
    Handler func(*indexer.Document) error
    Data string // or whatever data
}

Also make sure your slice holds pointers because go is pass-by-value.

var NewHandlers []*NewHandler

Then when you for loop, it goes like this.

for i, handler := range NewHandlers {
        err = handler.Handler(document)
        ....

And you can include your Data in the error.