1

I'm using this retry logic with a stop https://upgear.io/blog/simple-golang-retry-function/

My code looks like this

type Stop struct {
    error
}

...
if s, ok := err.(Stop); ok {
   return s.error
}
...

I'm trying to get the Stop functionality to work outside the namespace, so I'm doing this

...
return lib.Stop{errors.New("this is an error")}
...

But I'm getting a complication error:

implicit assignment to unexported field error in struct literal of type lib.Stop

How would I populate the Stop with the error when its unexported?

I was thinking that I need change the struct to Error error but then it doesnt work with the err.(Stop)

Any ideas how to do this?

Jonathan Hall
  • 75,165
  • 16
  • 143
  • 189
jaekie
  • 2,283
  • 4
  • 30
  • 52

1 Answers1

1

You could change it to a named field Err error and then explicitly add the Error() string method to make Stop implement error:


type Stop struct {
    Msg error
}

func (s Stop) Error() string {
    return s.Msg.Error()
}

Alternatively, you could just create a "constructor" func for Stop (which is the general approach for letting outside callers instantiate a struct with unexported fields):

type Stop struct {
    error
}

func NewStop(err error) Stop {
    return Stop{err}
}
yshavit
  • 42,327
  • 7
  • 87
  • 124