SlideShare uma empresa Scribd logo
Golang
pkg Errors Tratamento de erros
em Go eficaz e com
pouco código
DISCLAIMER
Erros!Faz parte de qualquer solução de
software confiável realizar verificações
de erros durante seus processo e criar
um caminho alternativo para que o
fluxo do programa não seja
interrompido.
LET’S GO!
AGENDA
Simples para o
Simples
A velha e boa
verificação de erro
em Go (ou tudo
que tínhamos)
Package
errors
Solução nativa da
biblioteca padrão para
soluções mais
robustas
Soluções mais
robustas
Quando é preciso
fazer uma
verificação de erros
mais eficaz
Interfaces e
Sentinelas
Reconstruir a roda
(antes da versão 1.13)
Simples
para o
simples
A velha e boa verificação de erro
em Go (ou tudo que tínhamos)
— Dave Cheney
“How does Go get
exceptions right? Why, by
not having them in the first
place.”
“Como o Go trata as exceções? Em
primeiro lugar não tendo exceções.
https://dave.cheney.net/2012/01/18/why-go-gets-exceptions-right
https://blog.golang.org/defer-panic-and-recover
https://play.golang.org/p/9-2vCvRuhmE
https://github.com/masisiliani/act-error
https://github.com/masisiliani/act-error
https://github.com/masisiliani/act-error
https://github.com/masisiliani/act-error
Soluções mais
Robustas
Quando é preciso fazer uma
verificação de erros mais eficaz
https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully
Interfaces e
Sentinelas
Reconstruir a roda
(antes da versão 1.13)
Sentinels
Error
Types
https://golang.org/pkg/io/
https://github.com/masisiliani/act-error
CONTEXTO
Por possuir uma
declaração simples
do erro, não permite
personalizar em
tempo de execução
ACOPLAMENTO
Pacotes distintos
consumindo o
mesmo pacote de
de errors sentinelas
ERROS
PÚBLICOS
Se a sua função for
pública, seu erro
também vai ter que
ser.
Consequentemente
aumenta sua
documentação.
Sentinels
https://github.com/masisiliani/act-error
https://github.com/masisiliani/act-error
ASSERTION
Para fazer a
verificação do erro
precisávamos apelar
para o asserção de
valores
ACOPLAMENTO
Pacotes distintos
consumindo o
mesmo pacote de
de errors sentinelas
ERROS
PÚBLICOS
Se a sua função for
pública, seu erro
também vai ter que
ser.
Consequentemente
aumenta sua
documentação.
Error
Types
Package
errors
Solução nativa da biblioteca
padrão para soluções mais
robustas
https://github.com/masisiliani/act-error
https://github.com/masisiliani/act-error
https://github.com/masisiliani/act-error
https://github.com/masisiliani/act-error
REFERÊNCIAS
[Working with Errors in Go 1.13]
[Golang Error Handling — Best Practice in 2020]
[Golang: How to handle Errors in v1.13]
[Error Handling in Go 1.13]
[Error Handling in Go]
[Working with Errors in Go 1.13]
Livro A Linguagem de Programação Go
7.08 Interface Error pg.264
7.10 Asserção de Tipo pg.275
THANKS!
Do you have any questions?
http://twitter.com/masisiliani
https://www.linkedin.com/in/masisiliani/
https://medium.com/@masisiliani
https://github.com/masisiliani
Vagas: https://grnh.se/25bec1202
https://forms.gle/ete8qkc4djcxh5Mi6
FEEDBACK!

Mais conteúdo relacionado

Mais procurados

Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e Selenium
André Thiago
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
Samanta Cicilia
 
Levando seu SCM à outro nível com Feature Flags
Levando seu SCM à outro nível com Feature FlagsLevando seu SCM à outro nível com Feature Flags
Levando seu SCM à outro nível com Feature Flags
André Paulovich
 
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosContinuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Samanta Cicilia
 
Continuous Delivery - versão estendida :)
Continuous Delivery - versão estendida :)Continuous Delivery - versão estendida :)
Continuous Delivery - versão estendida :)
Samanta Cicilia
 
Existe Vida além do FTP!
Existe Vida além do FTP! Existe Vida além do FTP!
Existe Vida além do FTP!
Gustavo Pereira
 
TDC2017 | São Paulo - Trilha Android How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Android How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha Android How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Android How we figured out we had a SRE team at ...
tdc-globalcode
 
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva 3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
minastestingconference
 
Instalando os Plug-ins do Gephi
Instalando os Plug-ins do GephiInstalando os Plug-ins do Gephi
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
Elias Nogueira
 
Visual Regression Testing: mais um tipo de teste pra sua pipeline
Visual Regression Testing: mais um tipo de teste pra sua pipelineVisual Regression Testing: mais um tipo de teste pra sua pipeline
Visual Regression Testing: mais um tipo de teste pra sua pipeline
Samanta Cicilia
 
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TOTVS - Agile Testing e a Importância de se ter Estratégia de TestesTOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
Samanta Cicilia
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
Samanta Cicilia
 
Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014
Elias Nogueira
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
minastestingconference
 
Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016
Bruno Maomeh
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
Samanta Cicilia
 
[DevOps Summit]Importância de testes automatizados para sustentar Continuous...
[DevOps Summit]Importância de testes automatizados para sustentar Continuous...[DevOps Summit]Importância de testes automatizados para sustentar Continuous...
[DevOps Summit]Importância de testes automatizados para sustentar Continuous...
Samanta Cicilia
 
[DevOps Carioca] Continuous Delivery
[DevOps Carioca]  Continuous Delivery[DevOps Carioca]  Continuous Delivery
[DevOps Carioca] Continuous Delivery
Samanta Cicilia
 
Alcançando qualidade de software através de entrega contínua
Alcançando qualidade de software através de entrega contínuaAlcançando qualidade de software através de entrega contínua
Alcançando qualidade de software através de entrega contínua
Samanta Cicilia
 

Mais procurados (20)

Testes com TestLink e Selenium
Testes com TestLink e SeleniumTestes com TestLink e Selenium
Testes com TestLink e Selenium
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
 
Levando seu SCM à outro nível com Feature Flags
Levando seu SCM à outro nível com Feature FlagsLevando seu SCM à outro nível com Feature Flags
Levando seu SCM à outro nível com Feature Flags
 
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a ServiçosContinuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
Continuous Delivery & APIs - Evoluindo uma Arquitetura Orientada a Serviços
 
Continuous Delivery - versão estendida :)
Continuous Delivery - versão estendida :)Continuous Delivery - versão estendida :)
Continuous Delivery - versão estendida :)
 
Existe Vida além do FTP!
Existe Vida além do FTP! Existe Vida além do FTP!
Existe Vida além do FTP!
 
TDC2017 | São Paulo - Trilha Android How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Android How we figured out we had a SRE team at ...TDC2017 | São Paulo - Trilha Android How we figured out we had a SRE team at ...
TDC2017 | São Paulo - Trilha Android How we figured out we had a SRE team at ...
 
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva 3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
 
Instalando os Plug-ins do Gephi
Instalando os Plug-ins do GephiInstalando os Plug-ins do Gephi
Instalando os Plug-ins do Gephi
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
 
Visual Regression Testing: mais um tipo de teste pra sua pipeline
Visual Regression Testing: mais um tipo de teste pra sua pipelineVisual Regression Testing: mais um tipo de teste pra sua pipeline
Visual Regression Testing: mais um tipo de teste pra sua pipeline
 
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TOTVS - Agile Testing e a Importância de se ter Estratégia de TestesTOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
TOTVS - Agile Testing e a Importância de se ter Estratégia de Testes
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
 
Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 
Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 
[DevOps Summit]Importância de testes automatizados para sustentar Continuous...
[DevOps Summit]Importância de testes automatizados para sustentar Continuous...[DevOps Summit]Importância de testes automatizados para sustentar Continuous...
[DevOps Summit]Importância de testes automatizados para sustentar Continuous...
 
[DevOps Carioca] Continuous Delivery
[DevOps Carioca]  Continuous Delivery[DevOps Carioca]  Continuous Delivery
[DevOps Carioca] Continuous Delivery
 
Alcançando qualidade de software através de entrega contínua
Alcançando qualidade de software através de entrega contínuaAlcançando qualidade de software através de entrega contínua
Alcançando qualidade de software através de entrega contínua
 

Semelhante a Golang e o pacote de erros (pkg errors)

Vamos falar de DevOps?
Vamos falar de DevOps?Vamos falar de DevOps?
Vamos falar de DevOps?
Karini Rodrigues Magalhaes
 
Lightning talk Test-Driven Development - TDD
Lightning talk Test-Driven Development - TDDLightning talk Test-Driven Development - TDD
Lightning talk Test-Driven Development - TDD
Willians De Paula Pereira
 
[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery
Samanta Cicilia
 
IFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOpsIFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOps
Leonardo Comelli
 
Test day 2012
Test day 2012Test day 2012
Test day 2012
Wellington Marion
 
Gitlab CI/CD com python
Gitlab CI/CD com pythonGitlab CI/CD com python
Gitlab CI/CD com python
Élysson Mendes Rezende
 
Ebook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPressEbook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPress
Daniel Paz
 
Revolução Go TDC 2016
Revolução Go TDC 2016Revolução Go TDC 2016
Revolução Go TDC 2016
Tomas Cretella Foglio
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
Matheus Fechine de Moura
 
Python e Golang - Parte 1
Python e Golang - Parte 1Python e Golang - Parte 1
Python e Golang - Parte 1
Marcos Aurelio Barranco
 
Apresentacao Cypress - Cases Adobe AEM
Apresentacao Cypress - Cases Adobe AEMApresentacao Cypress - Cases Adobe AEM
Apresentacao Cypress - Cases Adobe AEM
Bruna Gabriele de Paula
 
São Paulo MuleSoft Meetups - DevOps
São Paulo MuleSoft Meetups - DevOpsSão Paulo MuleSoft Meetups - DevOps
São Paulo MuleSoft Meetups - DevOps
Guilherme Pereira Silva
 
Debugging node
Debugging nodeDebugging node
Debugging node
Jeniffer Nolasco
 
Master App - Porque menos é mais!
Master App - Porque menos é mais!Master App - Porque menos é mais!
Master App - Porque menos é mais!
Rodrigo Serradura
 
Uma Olhada no Netbeans 6
Uma Olhada no Netbeans 6Uma Olhada no Netbeans 6
Uma Olhada no Netbeans 6
José Maria Silveira Neto
 
Estratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocdEstratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocd
Walmyr Lima e Silva Filho
 
GULP - Automatizador de tarefas
GULP - Automatizador de tarefasGULP - Automatizador de tarefas
GULP - Automatizador de tarefas
Jackson Veroneze
 
Gulp - Automatizador de tarefas de front-end
Gulp - Automatizador de tarefas de front-endGulp - Automatizador de tarefas de front-end
Gulp - Automatizador de tarefas de front-end
Mario Mendonça
 
TDD com Python e App Engine
TDD com Python e App EngineTDD com Python e App Engine
TDD com Python e App Engine
Ricardo Bánffy
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade I
João Lourenço
 

Semelhante a Golang e o pacote de erros (pkg errors) (20)

Vamos falar de DevOps?
Vamos falar de DevOps?Vamos falar de DevOps?
Vamos falar de DevOps?
 
Lightning talk Test-Driven Development - TDD
Lightning talk Test-Driven Development - TDDLightning talk Test-Driven Development - TDD
Lightning talk Test-Driven Development - TDD
 
[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery
 
IFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOpsIFSP 2015 - Cultura DevOps
IFSP 2015 - Cultura DevOps
 
Test day 2012
Test day 2012Test day 2012
Test day 2012
 
Gitlab CI/CD com python
Gitlab CI/CD com pythonGitlab CI/CD com python
Gitlab CI/CD com python
 
Ebook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPressEbook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPress
 
Revolução Go TDC 2016
Revolução Go TDC 2016Revolução Go TDC 2016
Revolução Go TDC 2016
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
 
Python e Golang - Parte 1
Python e Golang - Parte 1Python e Golang - Parte 1
Python e Golang - Parte 1
 
Apresentacao Cypress - Cases Adobe AEM
Apresentacao Cypress - Cases Adobe AEMApresentacao Cypress - Cases Adobe AEM
Apresentacao Cypress - Cases Adobe AEM
 
São Paulo MuleSoft Meetups - DevOps
São Paulo MuleSoft Meetups - DevOpsSão Paulo MuleSoft Meetups - DevOps
São Paulo MuleSoft Meetups - DevOps
 
Debugging node
Debugging nodeDebugging node
Debugging node
 
Master App - Porque menos é mais!
Master App - Porque menos é mais!Master App - Porque menos é mais!
Master App - Porque menos é mais!
 
Uma Olhada no Netbeans 6
Uma Olhada no Netbeans 6Uma Olhada no Netbeans 6
Uma Olhada no Netbeans 6
 
Estratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocdEstratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocd
 
GULP - Automatizador de tarefas
GULP - Automatizador de tarefasGULP - Automatizador de tarefas
GULP - Automatizador de tarefas
 
Gulp - Automatizador de tarefas de front-end
Gulp - Automatizador de tarefas de front-endGulp - Automatizador de tarefas de front-end
Gulp - Automatizador de tarefas de front-end
 
TDD com Python e App Engine
TDD com Python e App EngineTDD com Python e App Engine
TDD com Python e App Engine
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade I
 

Golang e o pacote de erros (pkg errors)

Notas do Editor

  1. É importante entender que para o Go, excessões são tão excessões que nem devem ser consideradas parte da estrutura da linguagem. E por isso, temos uma palavra reservada na linguagem para tratar exessões de verdade. Que é panic.
  2. Ao executar esse código vamos ver a mensagem de erro passada para a função New() no terminal.
  3. Projeto simples, que se chama Minha Agenda. Nesse projeto eu tenho o seguinte objetivo: Guardar meus contatos com um número de telefone.
  4. Sentinelas é um tipo de erro pré declarado