Skip to content

Commit

Permalink
feat: atualizar overview.yml com seções detalhadas sobre tratamento d…
Browse files Browse the repository at this point in the history
…e erro
  • Loading branch information
fabianoflorentino committed Dec 13, 2024
1 parent cc4a273 commit 9ad0635
Showing 1 changed file with 63 additions and 2 deletions.
65 changes: 63 additions & 2 deletions internal/tratamento_de_erro/overview.yml
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

0 comments on commit 9ad0635

Please sign in to comment.