Skip to content

Commit 0b8f24c

Browse files
committed
Add GetPlayersWithError
1 parent 507bf10 commit 0b8f24c

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

examples/player.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func main() {
3737
fmt.Println(player.Name)
3838

3939
// concurrently get multiple players by tag
40-
players, err := client.GetPlayers("#8QYG8CJ0", "#Q9RY8YRYJ")
40+
players, err := client.GetPlayersWithError("#8QYG8CJ0", "#Q9RY8YRYJ")
4141
if err != nil {
4242
panic(err)
4343
}

players.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,24 @@ func (h *Client) GetPlayer(tag string) (*Player, error) {
197197
return player, err
198198
}
199199

200-
// GetPlayers makes use of concurrency to get multiple players simultaneously.
201-
func (h *Client) GetPlayers(tags ...string) (Players, error) {
200+
// GetPlayers makes use of concurrency to get multiple players simultaneously. Players that failed to be fetched will be nil in the returned slice.
201+
func (h *Client) GetPlayers(tags ...string) Players {
202+
var wg sync.WaitGroup
203+
players := make(Players, len(tags))
204+
for i, tag := range tags {
205+
wg.Add(1)
206+
go func(i int, tag string) {
207+
defer wg.Done()
208+
player, _ := h.GetPlayer(tag)
209+
players[i] = player
210+
}(i, tag)
211+
}
212+
wg.Wait()
213+
return players
214+
}
215+
216+
// GetPlayersWithError makes use of concurrency to get multiple players simultaneously. Unlike GetPlayers, this function returns nil and error if any of the players failed to be fetched.
217+
func (h *Client) GetPlayersWithError(tags ...string) (Players, error) {
202218
var wg sync.WaitGroup
203219
players := make(Players, len(tags))
204220
errChan := make(chan error, len(tags))

0 commit comments

Comments
 (0)