Percursos
/
Go
Go
/
Exercícios
/
Tratamento de Erros
Tratamento de Erros

Tratamento de Erros

Médio

Instruções

Implementa vários tipos de tratamento de erros e de gestão de recursos.

Um ponto importante da programação é saber tratar erros e fechar recursos mesmo quando ocorrem erros.

Este exercício pede que trates vários tipos de erros. Como o tratamento de erros depende bastante da linguagem de programação, tens de consultar os testes da tua track para veres exatamente o que é necessário.

Implementação

Se és novo em erros ou panics do Go, recomendamos que leias primeiro a documentação sobre estes tópicos, para teres contexto.

Neste exercício, vais ter de definir uma função Use(opener ResourceOpener, input string) error que abre um recurso, chama Frob(input) ao recurso resultante e depois fecha esse recurso (em todos os casos). A tua função deve tratar corretamente os erros e os panics.

ResourceOpener opener será uma função que podes invocar diretamente com opener(), numa tentativa de «abrir» o recurso. Devolve um Resource e um valor de erro à maneira idiomática do Go:

Consulta o ficheiro common.go para veres as definições de Resource, ResourceOpener, FrobError e TransientError. Vais definir a tua solução no mesmo pacote que common.go e error_handling_test.go: "erratum". Isso fará com que esses tipos fiquem disponíveis para usares na tua solução.

Haverá alguns pontos na tua função Use onde podem ocorrer erros:

  • Ao invocar a função ResourceOpener passada ao Use como primeiro parâmetro, esta pode falhar com um erro do tipo TransientError; se isso acontecer, continua a tentar abrir o recurso. Se for outro tipo de erro, devolve-o a partir da tua função Use.

  • Ao chamar a função Frob ao Resource devolvido pela função ResourceOpener, esta pode entrar em panic com um FrobError (ou outro tipo de erro). Se for de facto um FrobError, vais ter de chamar a função Defrob do Resource usando a variável .defrobTag do FrobError que provocou o panic como entrada para a função Defrob. De qualquer das formas, o Use deve devolver o erro.

  • Repara também: se o Resource foi aberto com êxito, certifica-te de que chamas a sua função Close exatamente uma vez, aconteça o que acontecer (mesmo que tenham ocorrido erros).

Testar tipos de erro específicos pode ser feito com asserções de tipo. Também podes precisar de consultar os valores devolvidos com nome como forma útil de devolver informação de erro a partir da recuperação de um panic.

Editar via GitHub A ligação abre numa nova janela ou separador
Go Exercism

Estás pronto para começar Tratamento de Erros?

Inscreve-te no Exercism para aprenderes e dominares Go com 34 conceitos165 exercícios, e mentoria humana real, tudo grátis.