Combining all three implementations
To close this chapter off with a bang, we will implement a mechanism in which each Avatar
implementation takes a turn in trying to get the value. If the first implementation returns the ErrNoAvatarURL
error, we will try the next and so on until we find a useable value.
In avatar.go
, underneath the Avatar
type, add the following type definition:
type TryAvatars []Avatar
The TryAvatars
type is simply a slice of Avatar
objects; therefore, we will add the following GetAvatarURL
method:
func (a TryAvatars) GetAvatarURL(u ChatUser) (string, error) { for _, avatar := range a { if url, err := avatar.GetAvatarURL(u); err == nil { return url, nil } } return "", ErrNoAvatarURL }
This means that TryAvatars
is now a valid Avatar ...
Get Go Programming Blueprints now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.