-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: atualizar overview.yml com seções detalhadas sobre tratamento d…
…e erro
- Loading branch information
1 parent
cc4a273
commit 9ad0635
Showing
1 changed file
with
63 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,67 @@ | ||
--- | ||
description: | ||
name: | ||
name: Tratamento de erro | ||
sections: | ||
- title: | ||
- title: Entendendo erros | ||
text: | | ||
- Para quem já programa em outras linguagens: | ||
- Em Go não temos exceções. → https://golang.org/doc/faq#exceptions | ||
- "We believe that coupling exceptions to a control structure, as in the try-catch-finally idiom, results in convoluted code." | ||
- "Go's multi-value returns make it easy to report an error without overloading the return value. A canonical error type, coupled with Go's other features, makes error handling pleasant but quite different from that in other languages." | ||
- Aventureiros: https://blog.golang.org/error-handling-and-go | ||
- É interessante criar o hábito de lidar com erros imediatamente, similar a e.g. defer close. | ||
- package builtin, type error interface | ||
- package errors | ||
- title: Verificando erros | ||
text: | | ||
- Na minha religião, underscore é pecado. | ||
- Verifique seus erros! | ||
- (Exceção: fmt.Println) | ||
- Na prática: | ||
- Exemplo 0: fmt.Println | ||
- Exemplo 1: fmt.Scan(&var) | ||
- Exemplo 2: os.Create → strings.NewReader → io.Copy | ||
- Exemplo 3: os.Open → io.ReadAll | ||
- Código: https://github.com/ellenkorbes/aprendago/tree/master/c%C3%B3digo/23_tratamento-de-erros/02_verificando-erros | ||
- title: Print & log | ||
text: | | ||
- Opções: | ||
- fmt.Println() → stdout | ||
- log.Println() → timestamp + pode-se determinar onde o erro ficará logado | ||
- log.Fatalln() → os.Exit(1) sem defer | ||
- log.Panicln() → println + panic → funcões em defer rodam; dá pra usar recover | ||
- panic() | ||
- Recomendação: use log. | ||
- Código: | ||
- 1. fmt.Println | ||
- 2. log.Println | ||
- 3. log.SetOutput | ||
- 4. log.Fatalln | ||
- 5. log.Panicln | ||
- 6. panic | ||
- panic: http://godoc.org/builtin#panic | ||
- Código: https://github.com/ellenkorbes/aprendago/tree/master/c%C3%B3digo/23_tratamento-de-erros/03_print-e-log | ||
- title: Recover | ||
text: | | ||
- https://blog.golang.org/defer-panic-and-recover | ||
- https://golang.org/pkg/builtin/#recover | ||
- Exemplo: https://play.golang.org/p/ZocncqtwaK | ||
- Código: https://github.com/ellenkorbes/aprendago/blob/master/c%C3%B3digo/23_tratamento-de-erros/04_recover/main.go | ||
- title: Erros com informações adicionais | ||
text: | | ||
- Para que nossas funções retornem erros customizados, podemos utilizar: | ||
- return errors.New() | ||
- return fmt.Errorf() ← tem um errors.New() embutido, olha na fonte! | ||
- https://golang.org/pkg/builtin/#error | ||
- “Error values in Go aren’t special, they are just values like any other, and so you have the entire language at your disposal.” - Rob Pike | ||
- Código: | ||
- 1. errors.New | ||
- 2. var errors.New | ||
- 3. fmt.Errorf | ||
- 4. var fmt.Errorf | ||
- 5. type + method = error interface | ||
- Código: https://github.com/ellenkorbes/aprendago/tree/master/c%C3%B3digo/23_tratamento-de-erros/05_erros-com-informa%C3%A7%C3%B5es-adicionais |