package business import ( "fmt" "www.thenautilus.net/cgit/go-example/config" "www.thenautilus.net/cgit/go-example/something" ) type OverError struct { Value, Threshold int } func (e OverError) Error() string { return fmt.Sprintf("value %d is above threshold %d", e.Value, e.Threshold) } type Logic struct { somethingClient *something.Something threshold int } func New(conf *config.BusinessLogicConfig, client *something.Something) Logic { return Logic{ somethingClient: client, threshold: conf.Threshold, } } func (bl *Logic) DoSomething() error { value, err := bl.somethingClient.FetchValue() if err != nil { return fmt.Errorf("failed to fetch value: %w", err) } if value > bl.threshold { fmt.Printf("OVER! %d > %d\n", value, bl.threshold) return OverError{value, bl.threshold} } fmt.Printf("all good") return nil }