What is the idiomatic way to return either a struct or an error?

func canFail() (card Card, err error) {
    return card, errors.New("not yet implemented")
}

I think this, your third exampe, is fine too. The understood rule is that when a function returns an error, other return values cannot be relied upon to have meaningful values unless documentation clearly explains otherwise. So returning a perhaps meaningless struct value here is fine.


For example,

type Card struct {
}

func canFail() (card Card, err error) {
    return Card{}, errors.New("not yet implemented")
}