It would be very nice if flag.failf returned an error with a Cause() so that if you define your own flag.Value-implementing type, you don't lose context on errors you return out of its Set function here.
I would definitely be willing to open a patch if whoever's in charge agrees on the design. :)