With error in A (try it on The Go Playground), output:
LoadModelA
2009/11/10 23:00:00 LogError
2009/11/10 23:00:00 Error LoadModelB
With error in B (try it on The Go Playground), output:
LoadModelA
LoadModelB
2009/11/10 23:00:00 LogError
2009/11/10 23:00:00 Error LoadModelB
Without error (try it onThe Go Playground), output:
LoadModelA
LoadModelB
Done.
main Done.
Here is the code:
package main
import (
    "fmt"
    "log"
)
func (worker *Worker) GetData() error {
    if err := worker.LoadModelA(); err != nil {
        worker.LogError()
        return err
    }
    if err := worker.LoadModelB(); err != nil {
        worker.LogError()
        return err
    }
    fmt.Println("Done.")
    return nil
}
func main() {
    w := &Worker{}
    err := w.GetData()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("main Done.")
}
type Worker struct{}
func (w *Worker) LoadModelA() error {
    fmt.Println("LoadModelA")
    return nil
    //return fmt.Errorf("Error LoadModelB")
}
func (w *Worker) LoadModelB() error {
    fmt.Println("LoadModelB")
    return nil
    //return fmt.Errorf("Error LoadModelB")
}
func (w *Worker) LogError() error {
    log.Println("LogError")
    return nil
}