Tratamento de Exceções na
Linguagem Go
Aluna:
Karla Polyana Silva Falcão
kpsf@cin.ufpe.br
Orientador:
Fernando J. Castor d...
Programação Concorrente
Programa Seqüencial em Go:
package main
import ("time";"fmt")
func a(msg string, sec int64){
time...
Problemas com Concorrência
#include <pthread.h>
#include <stdio.h>
int x=0;
void *f(void *threadid){
x++;
pthread_exit(NUL...
Concorrência em Go
package main
import ("fmt")
var x int = 0
var c = make(chan int)
func main(){
go f()
go g()
fmt.Println...
Por que Go?
Go é uma linguagem de programação
criada pela Google em setembro de
2009. Já em 2010 alcançou a décima
sexta p...
Tratando Erros em Go
(Erros = Exceções)
package main
import ("fmt")
func f(){
div := 9/0
}
func main() {
f()
}
FONTE: http...
package main
import ("fmt")
func f(){
div := 9/0
}
func main() {
defer func(){
if x:=recover();x!=nil{
fmt.Println(“Erro :...
Problema (1)
package main
import ("fmt")
func main() {
defer func(){
if x:=recover();x!=nil{
fmt.Println(“Erro :”,x)
}
fmt...
Problema (2)
package main
import ("fmt")
var c = make(chan int)
func f(){
time.sleep(3*1e9)
c<-x
}
func main() {
defer fun...
Resolvendo o problema
package main
import ("fmt")
var c = make(chan int)
func f(){
div := 9/0
}
safunc main() {
defer func...
Referências e agradecimentos
Agradecimentos :
 À FACEPE e ao CNPq pelo financiamento da
pesquisa.
 Ao meu orientador.
...
Próximos SlideShares
Carregando em…5
×

Tratamento de exceções em GO

239 visualizações

Publicada em

0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
239
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1
Ações
Compartilhamentos
0
Downloads
3
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Tratamento de exceções em GO

  1. 1. Tratamento de Exceções na Linguagem Go Aluna: Karla Polyana Silva Falcão kpsf@cin.ufpe.br Orientador: Fernando J. Castor de Lima Filho castor@cin.ufpe.br Universidade Federal de Pernambuco (UFPE) Centro de Informática (CIn)
  2. 2. Programação Concorrente Programa Seqüencial em Go: package main import ("time";"fmt") func a(msg string, sec int64){ time.Sleep(sec *1e9) fmt.Println(msg) } func main(){ fmt.Println("Inicio...") a("tea", 3) a("coffee", 2) time.Sleep(4e9) fmt.Println("Fim...") } Programa Concorrente em Go: package main import ("time";"fmt") func a(msg string, sec int64) { time.Sleep(sec *1e9) fmt.Println(msg) } func main(){ fmt.Println("Inicio...") go a("tea", 3) go a("coffee", 2) time.Sleep(4e9) fmt.Println("Fim...") }
  3. 3. Problemas com Concorrência #include <pthread.h> #include <stdio.h> int x=0; void *f(void *threadid){ x++; pthread_exit(NULL); } void *g(void *threadid){ x--; pthread_exit(NULL); } int main (){ pthread_t thread1, thread2; pthread_create(&thread1, NULL, f, NULL); pthread_create(&thread2, NULL, g, NULL); printf("%dn",x); pthread_exit(NULL); }  Linguagem C Problema : Indeterminismo - Qual o valor final de “x”? Solução : Uso de semáforos, mutexes, monitores, etc.
  4. 4. Concorrência em Go package main import ("fmt") var x int = 0 var c = make(chan int) func main(){ go f() go g() fmt.Println(<-c) } func f() { x++ c<-x } func g() { x-- c<-x }  Facilidade na criação de threads (goroutines)  Sincronização  Sem dados compartilhados entre threads (goroutines)  Linguagem Go
  5. 5. Por que Go? Go é uma linguagem de programação criada pela Google em setembro de 2009. Já em 2010 alcançou a décima sexta posição, no ranking da TIOBE Programming Community. Go tem foco na facilidade de programação, desempenho e escalabilidade em ambiente multi-core, como é o mundo hoje em dia.
  6. 6. Tratando Erros em Go (Erros = Exceções) package main import ("fmt") func f(){ div := 9/0 } func main() { f() } FONTE: http://images.sodahead.com/polls/000628299/polls_panic_attack_5656_707107_answer_5_xlarge.jpeg
  7. 7. package main import ("fmt") func f(){ div := 9/0 } func main() { defer func(){ if x:=recover();x!=nil{ fmt.Println(“Erro :”,x) } fmt.Println(“Tudo Ok!”) }() f() } go f() Tratando Erros em Go (Erros = Exceções) FONTE: http://images.sodahead.com/polls/000628299/polls_panic_attack_5656_707107_answer_5_xlarge.jpeg
  8. 8. Problema (1) package main import ("fmt") func main() { defer func(){ if x:=recover();x!=nil{ fmt.Println(“Erro :”,x) } fmt.Println(“Tudo Ok!”) }() go f() go g() //Pode entrar em pânico! go h() //Pode entrar em pânico! }  Se houver um erro não recuperado em uma goroutine todas as outras no mesmo nível e em níveis superiores morrem! FONTE: http://kynas.blogs.sapo.pt/arquivo/2004_02.html
  9. 9. Problema (2) package main import ("fmt") var c = make(chan int) func f(){ time.sleep(3*1e9) c<-x } func main() { defer func(){ if x:=recover();x!=nil{ fmt.Println(“Erro :”,x) } fmt.Println(“Tudo Ok!”) }() go f() <-c } FONTE: http://kynas.blogs.sapo.pt/arquivo/2004_02.html  Não há sincronização implícita entre as goroutines!
  10. 10. Resolvendo o problema package main import ("fmt") var c = make(chan int) func f(){ div := 9/0 } safunc main() { defer func(){ if x:=recover();x!=nil{ fmt.Println(“Erro :”,x) } fmt.Println(“Tudo Ok!”) }() go f() <-c } go func(){ if x:=recover();x!=nil{ fmt.Println(“Erro :”,x) } fmt.Println(“Tudo Ok!”) f() c<-1 }() Modificação no front-end GCCGO  Nova palavra reservada - safunc ( Safe Function)  Injeção de Código - Função anônima com tratador - Canal para a sincronização http://kynas.blogs.sapo.pt/arquivo/2004_02.html
  11. 11. Referências e agradecimentos Agradecimentos :  À FACEPE e ao CNPq pelo financiamento da pesquisa.  Ao meu orientador. Referências :  Especificação da linguagem Go. End.: www.golang.org.  Comunidade que indica a popularidade de linguagens de programação. End.: http://www.tiobe.com/index.php/content/paperinf o/tpci/index.html.

×