O pacote Golang ErrGroup é usado para fornecer ferramentas para sincronização, propagação de erros e cancelamento de contexto para um grupo de goroutinos que executam uma tarefa comum.
Vamos dar uma olhada em um pacote de como usar o ErrGroup.
Importar pacote necessário
Para usar o pacote ErrGroup, você precisa importá -lo usando a cláusula de importação. O código de exemplo abaixo mostra como importar o pacote ErrGroup.
importar "Golang.org/x/sync/errgroup "WithContext Função
O pacote ErrGroup nos fornece a função WithContext. A função retorna um novo grupo e o contexto associado.
Se a função passada retornar um erro não-0-nil ou o retorno de espera, o contexto será cancelado.
Vá func
A segunda função fornecida pelo pacote ErrGroup é a função Go. Esta função chama uma função especificada para uma nova goroutina.
Se a primeira chamada retornar um erro não-nil, isso cancela o contexto.
Espere func
A terceira função é a função de espera. Esta função espera um bloco até que a função chama do método Go retornar um valor.
Exemplo
Vamos ver como podemos usar o pacote ErrGroup. Vamos começar com um conjunto de rotinas que simplesmente imprimem um valor.
Pacote principalAqui, temos um loop que simplesmente executa um monte de goroutinas e imprimir o valor atual na iteração do loop.
Se executarmos o código acima, você percebe que ele realmente não impede nada. Isso ocorre porque os Goroutines estão dentro da função principal e, uma vez que a função principal termina, o GO encerrará todo o programa, independentemente de as goroutinas terminam ou não.
Podemos resolver isso usando o pacote de sincronização da biblioteca padrão. Verifique nosso tutorial sobre Golang Sync para saber mais.
https: // linuxhint.com/golang-sync/
Podemos redefinir o código acima usando grupos de espera como mostrado abaixo:
Pacote principalAqui, apresentamos a "concorrência" usando grupos de espera. Em poucas palavras, o grupo de espera é um balcão que nos permite bloquear a função principal de sair até que todas as goroutinas terminem de executar.
O grupo de espera funciona criando um balcão que mantém o trato do número de goroutinas no que. Depois que uma goroutina é concluída, removemos -a do que. Uma vez que o que.
Observe a função Adicionar? Usamos isso para agregar um valor ao balcão do grupo de espera. Depois que a execução é feita, removemos a goroutina concluída usando o método feito.
Usando errGroup
No exemplo acima, processamos um grupo de goroutines usando o pacote de sincronização em Go. No entanto, não há mecanismo para lidar com nenhum erro. Embora não seja necessário para um exemplo simples como mostrado acima, é importante para muitas aplicações.
Para isso, podemos usar a função ErrGroup, que permite lidar com erros em um grupo de espera. Dê uma olhada no exemplo abaixo:
Pacote principalNeste exemplo, introduzimos uma função simples que gera um número inteiro aleatório. Se o valor aleatório for igual à tarefa, retornamos um erro.
Em seguida, usamos o grupo de erros para lidar com os erros usando o grupo e funções Go.
Fechamento
Este guia abordou como introduzir e trabalhar com grupos de espera e lidar com erros usando o pacote ErrGroup.