Vous êtes sur la page 1sur 83

Paradigmas de Linguagens de Programao

Delano Oliveira Janderson Jason Luan Barbosa Nat Melo


{delanoho, jandersonjba, luanbg, natavm}@lcc.ufcg.edu.br

Agenda

Introduo Valores e Tipos Armazenamento Associaes Abstraes Unidades de Programa Sistemas de Tipos Sequenciadores Concorrncia Concluso
PLP - Linguagem Go

Introduo

Introduo

Motivao Sintaxe e Semntica Processador da Linguagem Outras Caractersticas

PLP - Linguagem Go

Motivao

Compilada Sensao de uma linguagem dinmica Simula Orientao a Objetos Possui Garbage Collection Multi-processamento Open-source 18a linguagem mais usada no mundo segundo o site da Tiobe

PLP - Linguagem Go

Sintaxe e Semntica

Go rene caractersticas sintticas de vrias linguagens Possui uma Sintaxe simples e intuitiva

A sintaxe descrita por uma Gramtica (Extended Backus-Naur Form)


Semntica Operacional

PLP - Linguagem Go

Processador da Linguagem

Compilador: gccgo (6g, 6l, 8g, 8l)

Cdigo Fonte

*.8 ou *.6

Executvel

PLP - Linguagem Go

Outras Caractersticas

Criada pela Google e lanada em novembro de 2009 Equipe: Robert Griesemer, Rob Pike e Ken Thompson

PLP - Linguagem Go

Valores & Tipos

Valores & Tipos

Valores Boolean Numrico String Array Struct Ponteiros Abstrao de funo e procedimento Mapa Channel

Tipos Primitivos Compostos Recursivo


Checagem de Tipos Equivalncia de Tipos Princpio da Completude Expresses

PLP - Linguagem Go

10

Valores
else if (jogador_atual.GetCor() == Vermelho){ tomadas, tuplas, _ := JogadaObrigatoria(tabuleiro_jogo, jogador_atual.GetCor()); if (LenArrayNode(tomadas) == 1){ if (!tabuleiro_jogo.IsPecaDama(tuplas[0].X, tuplas[0].Y)) { contagemEmpate = 0; } RealizarTomada(tabuleiro_jogo, tuplas[0].X, tuplas[0].Y, tomadas[0], jogador_atual.GetCor(), true); } var posicao3 *Coordenada }

Em Go, abstraes de funes e procedimentos so valores de segunda

classe. Funes podem ser passadas como parmetros e retornadas como valor de funo.
PLP - Linguagem Go

11

Valores

Nmericos

Arrays

Abstrao de Funo

else if (jogador_atual.GetCor() == Vermelho){ tomadas, tuplas, _ := JogadaObrigatoria(tabuleiro_jogo, jogador_atual.GetCor()); if (LenArrayNode(tomadas) == 1){ if (!tabuleiro_jogo.IsPecaDama(tuplas[0].X, tuplas[0].Y)) { contagemEmpate = 0; } RealizarTomada(tabuleiro_jogo, tuplas[0].X, tuplas[0].Y, tomadas[0], jogador_atual.GetCor(), true); } var posicao3 *Coordenada }

Abstrao de Procedimento

Ponteiro

Booleanos

Em Go, abstraes de funes e procedimentos so valores de segunda

classe. Funes podem ser passadas como parmetros e retornadas como valor de funo.
PLP - Linguagem Go

12

Tipos Primitivos
var var var var barra string = "===== contagemEmpate int = 0 travou bool = false porcentagem float = 10.5

Boolean Representa o conjunto de valores booleanos

Numeric Representa o conjunto de valores inteiros ou valores de ponto-

flutuante uint(8, 16, 32, 64), int(8, 16, 32, 64), float(32, 64), complex(64, 128) String Array de bytes. Imutvel

PLP - Linguagem Go

13

Tipos Compostos

Produtos Cartesianos : Structs


type Tabuleiro struct { matriz [8] [8] *Peca int totalPecas }

Struct Sequncia de elementos.

Campos: possuem nome e tipo.

Mapeamentos : Arrays, Mapas ou Funes


resultado := map[string]int{"sao paulo" : 3, "corinthians" :0}

Mapa Grupo no ordenado de elementos. Possui Keys nicas.


PLP - Linguagem Go

14

Tipos Compostos

Produtos Cartesianos : Structs


[][]*Peca x int
type Tabuleiro struct { matriz [8] [8] *Peca int totalPecas }

Struct Sequncia de elementos.

Campos: possuem nome e tipo.

Mapeamentos : Arrays, Mapas ou Funes


resultado := map[string]int{"sao paulo" : 3, "corinthians" :0}

Mapa Grupo no ordenado de elementos. Possui Keys nicas.


PLP - Linguagem Go

15

Tipos Compostos

Tipos Recursivos: Structs


type Node struct { valor Tupla next *Node }

Implementados atravs de ponteiros.

Go no d suporte:
Unio Disjunta Conjuntos Potncia

PLP - Linguagem Go

16

Checagem de Tipos

Go estaticamente e fortemente tipada.


func main (){ var nome string = "plp" nome = 18 } prog.go:6: cannot convert 18 to type string prog.go:6: cannot use 18 (type int) as type string in assignment func main (){ dez_decimal := 10.0 var dez int = dez_decimal }

Fortemente

Erro ao tentar compilar!!!

prog.go:6: cannot use dez_decimal (type float) as type int in assignment

PLP - Linguagem Go

17

Equivalncia de Tipos

Go d suporte a equivalncia nominal


package main type Peca struct {cor int, dama bool} type Tupla struct {tamanho int,comida bool} func (peca *Peca) EhDama () (bool){ return peca.dama } func main (){ var tupla *Tupla = new(Tupla) Erro ao tentar tupla.EhDama() compilar!!! } prog.go:15: tupla.EhDama undefined (type Tupla has no field EhDama)

Go no d suporte a equivalncia estrutural!


PLP - Linguagem Go

18

Princpio da Completude

Go quebra o princpio da completude de tipo.


necessrio o uso do tipo File para manipular

arquivos persistentes. Funes s podem retornar valores primitivos ou ponteiros.


func (tabuleiro *Tabuleiro) IsZerou (cor int) bool if (){ return false } return true }

PLP - Linguagem Go

19

Expresses

Literais: Valores dos tipos bool, int, uint, float, string Agregados: array, maps, structs Funes
Go no d suporte a:
Expresses Condicionais
Expresses Iterativas

PLP - Linguagem Go

20

Armazenamento

Armazenamento

Variveis e Atualizao Arrays Semntica de Cpia x Semntica de Referncia Variveis Locais e Globais Heap Persistentes

Tipos de Comandos Skip Atribuio Chamada de procedimento Comandos Sequencial Colateral Condicional Expresses com Efeitos Colaterais

PLP - Linguagem Go

22

Variveis e Atualizao

Os valores armazenveis (storables) so os valores dos tipos primitivos e ponteiros Variveis Temporrias
Todas as variveis, com exceo do tipo File

Variveis Persistentes
Em Go, as variveis persistentes so do tipo File

PLP - Linguagem Go

23

Variveis e Atualizao

Go d suporte a atualizao seletiva e atualizao total


var posicaoFinal Coordenada; posicaoFinal.x = 1; posicaoFinal.y = 2; var posicaoInicial Coordenada; posicaoInicial = posicaoFinal;

Seletiva

Total

PLP - Linguagem Go

24

Arrays

Go d suporte a Arrays Estticos.


Os arrays possuem tamanho fixo e no podem armazenar valores de tipos diferentes.
func (tabuleiro *Tabuleiro) GetPecas (cor int) ([12]*Tupla){ var pecas [12] *Tupla; (...) return pecas; }

PLP - Linguagem Go

25

Semntica de Cpia x Semntica de Referncia

Semntica de cpia utilizada para valores de qualquer tipo. Semntica de Referncia utilizada apenas para ponteiros.
var posicao1 Coordenada; posicao1.x = 1; posicao1.y = 2; var posicao2 *Coordenada; var posicao3 *Coordenada; posicao2 = &posicao1; posicao3 = posicao2; posicao3.x = 5; posicao3.y = 5;

Por Referncia

Por Cpia

PLP - Linguagem Go

26

Variveis Locais e Globais

Variveis Globais so declaradas da seguinte forma: var + nomeVariavel + tipo Para variveis locais podem ser utilizados acares sinttico
var jogadorDaVez string = tabuleiro
func main() { tamanho := 10; if (...){ var numBombas = 15; } }

Varivel Global

Acar Sinttico

Variveis Locais

PLP - Linguagem Go

27

Variveis Heap

Variveis podem ser declaradas a partir da palavra reservada new. No existe um mecanismo para o programador destruir as variveis. Go possui Garbage Collection.
Alocao de memria
var tabuleiro_jogo *Tabuleiro = new (Tabuleiro)

PLP - Linguagem Go

28

Variveis persistentes

So do tipo File
oldfile := "text.txt" newfile := "text2.txt" doc, _ := ioutil.ReadFile(oldfile) ioutil.WriteFile(newfile,doc,0644)

PLP - Linguagem Go

29

Skip e Atribuio

for ; pilha != nil ; { tabTemp := tabuleiro.Copy() pilha, tuplaAtual = pilha.Pull() tabTemp.ComerPeca(posX, posY, tuplaAtual, cor) caminhoAtual, tamanhoCaminhoTupla = TomadaMaximaPeca(tabTemp, tuplaAtual.FicarX, tuplaAtual.FicarY, cor) tamanhoCaminhoTupla++

No h atribuio mltipla em Go.


PLP - Linguagem Go

30

Skip e Atribuio
Skip usado para separar expresses Atribuio

for ; pilha != nil ; { tabTemp := tabuleiro.Copy() pilha, tuplaAtual = pilha.Pull() tabTemp.ComerPeca(posX, posY, tuplaAtual, cor) caminhoAtual, tamanhoCaminhoTupla = TomadaMaximaPeca(tabTemp, tuplaAtual.FicarX, tuplaAtual.FicarY, cor) tamanhoCaminhoTupla++

Acar sinttico

Atribuio simultnea

No h atribuio mltipla em Go.


PLP - Linguagem Go

31

Chamada de Procedimentos
Chamada de procedimento
peca := new (Peca) peca.SetCor(Preto) //... func (peca *Peca) SetCor (cor int) { peca.cor = cor }

Procedimento

PLP - Linguagem Go

32

Comando Sequencial
meuTabuleiro.n = 0; meuTabuleiro.m = 0; meuTabuleiro.ganhou = false;

meuTabuleiro.n = 0 meuTabuleiro.m = 0 meuTabuleiro.ganhou = false

Separados por ponto-e-vrgula, ou por quebra de linha.

Comando Colateral

No existem comandos colaterais.

PLP - Linguagem Go

33

Comando Condicional

Go d suporte atravs de: if ,else e switch.


var jogada int; if (ehHumano) { var pos [2]int = JogarHumano(); jogada = tabuleiro.Jogada(pos); } else { var pos [2]int = JogarAutomatico(); jogada = tabuleiro.Jogada(pos); }

var aux string; switch opcao{ case 1: aux = "Jogar case 2: aux = "Ajuda" case 3: aux = "Fechar" }
PLP - Linguagem Go

34

Comandos Iterativos

Iterao definida
for i:=0; caminhoAtual[i] != nil && i < MAXIMO_CAMINHOS; i++ { nodeAtual = new(Node); nodeAtual.SetValor(tuplaAtual); //... }

Iterao indefinida
for i > 0 { var a int = Random(n); var b int = Random(n); //... }

Palavra reservada for funcionando como o comando while em outras linguagens.

PLP - Linguagem Go

35

Associaes

Associaes

Entidades Associveis Escopo Estrutura de Blocos Visibilidade


Declaraes Definio Declarao de Tipo Declarao de Varivel Declaraes Colaterais Declaraes Sequenciais Declaraes Recursivas

Comando Bloco Expresso Bloco Princpio da Qualificao

PLP - Linguagem Go

37

Entidades Associveis

Valores primitivos e compostos Abstraes de funes e procedimentos Variveis e Tipos


meuTabuleiro.m = 0; meuTabuleiro.ganhou = false; var Numero int = calculaNumDeMinas(n); const( MAX_MOVIMENTOS int = 50);

PLP - Linguagem Go

38

Escopo
const s = 2; func incremento ( d int ) int { return ds; } func executaIncremento ( valor int ) int { const s = 3; return incremento ( valor ); } func main () { fmt.Println( executaIncremento(5) ); }

Sada: 10

Em Go, o corpo de um bloco avaliado no ambiente em que foi definido (associao esttica).
PLP - Linguagem Go

39

Blocos: Estrutura e Visibilidade


var tamanhoTabuleiro int = 10; for { var tamanhoTabuleiro = 15; for { var tamanhoTabuleiro = 20; fmt.Println( tamanhoTabuleiro ); break; } fmt.Println( tamanhoTabuleiro ) ; break; } fmt.Println( tamanhoTabuleiro );

imprime 20 imprime 15 imprime 10

Estrutura: blocos aninhados. Visibilidade: variveis declaradas em blocos de escopo internos no so visveis a blocos de escopo externos.
PLP - Linguagem Go

40

Definio

As definies em Go podem ser de tipo, abstrao de funes, abstrao de procedimentos, variveis, constantes.
const( MAX_MOVIMENTOS int = 50) func Jogada() (int,int) { // } var posJogada; var posX *int; var posAux *int;

Constante Abstrao de funo Variveis

PLP - Linguagem Go

41

Declarao de Tipo
type Peca struct { cor int; dama bool; }

Go d suporte a declarao de tipos atravs da palavra reservada type.

O tipo Peca sendo declarado.

Declarao de Varivel
var vertical string = "Coordenada Vertical: ; var valor int = 1; var decimal float = 1.0;

PLP - Linguagem Go

42

Declarao sequencial

Como a maioria das linguagens imperativas, Go d suporte declarao sequencial.


tamanhoMaiorCaminho := 0; tamanhoCaminhoTupla := 0; var pilha *Node = nil; var caminhoAtual [MAXIMO_CAMINHOS] *Node;

Declaraes Colaterais

Go no d suporte a este tipo de declarao.

PLP - Linguagem Go

43

Declarao recursiva

Go d suporte a declarao recursiva.

func TomadaMaximaPeca(tabuleiro *Tabuleiro, posX int, posY int, cor int) ([MAXIMO_CAMINHOS] *Node, int) { caminhos := tabuleiro.GetOpcoesComida(posX, posY, cor); for ;pilha != nil; { caminhoAtual, tamanhoCaminhoTupla = TomadaMaximaPeca(tabTemp, tuplaAtual.FicarX, tuplaAtual.FicarY, cor); return caminhosMaximos, tamanhoMaiorCaminho; }

Chamada recursiva

PLP - Linguagem Go

44

Comando bloco

Go d suporte a comando bloco.

func ( pilha Node ) PrintValorProximo( ) { Println ( "|" , pilha.GetValor( ) , "|" ); next := pilha.GetNext( ); Println(next.GetValor()); }

Declarao que usada apenas pra executar o comando

PLP - Linguagem Go

45

Expresso bloco

Go d suporte a expresso bloco.


func (peca *Peca) GetValue(peca2 *Peca)(bool){ valor1 := peca.EhDama() valor2 := peca2.EhDama() return valor1 && valor2 }

Declaraes usadas apenas para avaliar a expresso.

PLP - Linguagem Go

46

Princpio da Qualificao

Go no viola o princpio da qualificao, pois possvel realizar qualquer computao dentro de um bloco.
func (pilha *Node) GetNext() (*Node, *Tupla){

next := pilha.GetNext() valor := next.GetValor() func nome(){ //Corpo da funcao } return next, valor
}

Um bloco dentro do outro.


PLP - Linguagem Go

47

Abstraes

Abstraes

Tipos de Abstraes Abstrao de Funo Abstrao de Procedimento


Princpio da Abstrao Parmetros

Argumentos Passagem de Parmetros Princpio da Correspondncia Ordem de Avaliao

PLP - Linguagem Go

49

Abstrao de Funo

Go d suporte a abstraes de funes atravs da palavra reservada func. A presena do retorno caracteriza a abstrao de funo.

func calculaNumDeMinas(tamanho int) int{ numeroDeBombas := int(tamanho*tamanho*20/100); if (numeroDeBombas%2 == 0) { numeroDeBombas += 1; } //m sempre impar if (tamanho <= 10) { numeroDeBombas += 2; } return numeroDeBombas; }
PLP - Linguagem Go

50

Abstrao de Procedimento

Go usa a mesma palavra reservada para caracterizar uma Abstrao de Procedimento, como em Abstraes de Funes. (func) A diferena que caracteriza a Abstrao de Procedimento a falta do retorno.
func inicializarJogo() { tabuleiro.ReiniciaTabuleiro(); ehHumano = true; }

PLP - Linguagem Go

51

Princpio da abstrao

Go no viola o princpio da abstrao, pois possvel construir abstrao sobre qualquer categoria sinttica da linguagem, como por exemplo: variveis, funes e procedimentos.

PLP - Linguagem Go

52

Parmetros

Como Go fortemente tipada, os parmetros devem possuir tipos definidos. Podem ser de qualquer tipo.

type Peca struct { cor int dama bool


} func (peca *Peca) EhDama () (bool){ return peca.dama }

PLP - Linguagem Go

53

Passagem de Parmetros

Em Go a passagem de parmetros por cpia\valor.


func Inverter (i int) int { if(i != 0) { return 0 } return 1 }

Go no d suporte a passagem de parmetros por referncia,

mas simula com o uso de ponteiros.


func (pilha *Node) Pull() (*Node, *Tupla) { return pilha.GetNext(), pilha.GetValor() }

Ponteiro
PLP - Linguagem Go

54

Princpio da Correspondncia
Go viola o princpio da correspondncia, pois no existe um

mecanismo de passagem de parmetro correspondente a definio de constante. Cdigo abaixo no compilvel.


const constante = 10; func funcao ( c const ) const { return c ; } func main ( ) { fmt.Println ("Imprimir constante:" , funcao ( constante ) ) ; }

D erro de sintaxe
PLP - Linguagem Go

55

Ordem de Avaliao

Eager Evaluation
var p int; func main () { p = 3; print ( p ) } func print ( n int ) { Println(n); p = 100; Println(n); }

Sada: 3 3

PLP - Linguagem Go

56

Unidades de Programa

Unidades de Programa

Pacotes Tipos Abstratos de Dados Objetos e Classes Unidades Genricas

PLP - Linguagem Go

58

Pacotes

As funes e variveis globais que comeam com letra Maiscula sero visveis para quem importar esse pacote. Caso contrrio, a funo fica com visibilidade privada.

package tabuleiro //... func (meuTabuleiro *Tabuleiro) Ganhou() bool { return meuTabuleiro.ganhou; } func (meuTabuleiro *Tabuleiro) AlguemGanhou(){ meuTabuleiro.ganhou = true; } func calculaNumDeMinas(tamanho int) int{ //... return numeroDeBombas; }/
PLP - Linguagem Go

Funes visveis

Funo com visibilidade privada


59

Tipo Abstrato de Dados


package tabuleiro import (. "fmt"; . "./pecaPkg"; . "./util") type Tabuleiro struct {matriz [8] [8] *Peca} func (tabuleiro *Tabuleiro) SetPecaDama (x int, y int){ tabuleiro.matriz[x][y].SetDama(true) } //...

PLP - Linguagem Go

60

Objetos e Classes

Go no tem Objetos e Classes, porm, simula-os atravs de structs e funes ligadas a esses tipos.
type Node struct { valor Tupla next *Node } //... func (pilha *Node) Pull() (*Node, *Tupla) { return pilha.GetNext(), pilha.GetValor() }

Unidades Genricas

Go no d suporte a unidades genricas.


PLP - Linguagem Go

61

Sistemas de Tipos

Sistema de Tipos

Monomorfismo Sobrecarga Polimorfismo Paramtrico Polimorfismo por Incluso Interfaces Coero

PLP - Linguagem Go

63

Monomorfismo
func (meuTabuleiro *Tabuleiro) Ganhou() bool{ return meuTabuleiro.ganhou; } func (meuTabuleiro *Tabuleiro) AlguemGanhou() { As abstraes definidas pelo meuTabuleiro.ganhou = true; } programador, em Go, so

Println("---------------------------"); Print("Linha: "); Println(posMaquina[0]+1); Print("Coluna: "); Println(posMaquina[1]+1); Println("---------------------------");

monomrficas. Toda entidade tem um tipo especfico associado.

Mas, algumas abstraes embutidas (built-in) no so monomrficas.

PLP - Linguagem Go

64

Sobrecarga
Go d suporte a sobrecarga de operadores built-in. Entretanto, no d suporte a sobrecarga de operaoes. (Operadores: +, -, e outros)
var barra string = "===== ; //... if (tabuleiro_jogo.IsZerou (jogador1.GetCor())){ Println(barra + "Jogador", jogador2.GetCor() + 1, "VENCEU! PARABNS", barra); break; }//...

Para tipos da prpria linguagem, um nico identificador ou operador pode denotar diferentes abstraes.

PLP - Linguagem Go

65

Polimorfismo por Incluso


type Natural int; type Inteiro int; var x Natural = 1; var y Inteiro = -1; Println(x+y);

//input.go:10: invalid operation: x + y (type Natural + Inteiro)

Go no tem tipos que contenham subtipos que herdam operaes aplicveis a valores desses tipos.

PLP - Linguagem Go

66

Polimorfismo Paramtrico
func polimorfismoParametrico(a int64, b int64) { Println(a); Println(b); } func main() { var x int8 = 1; var y int8 = 2; polimorfismoParametrico(x, y); } //input.go:13: cannot use x (type int8) as type int64 in function argument //input.go:13: cannot use y (type int8) as type int64 in function argument

Go no d suporte a polimorfismo paramtrico.

PLP - Linguagem Go

67

Interface
package main import . "fmt"; func main(){ jogador := new(Jogador); jogador.nome = "iza"; peca := new(Peca); peca.cor = "preto"; imprimir(jogador); imprimir(peca); } type printer interface { Print(); } func (p *Peca) Print() { Println(p.cor); } func (j *Jogador) Print() { Println(j.nome); } func imprimir (p printer) { p.Print(); } type Peca struct { cor string; } type Jogador struct { nome string; }
PLP - Linguagem Go

Go simula o uso de interface com o tipo interface.

68

Coerso
func Random(n int) int { sec, nsec, err := Time(); if err != nil { Seed(int64(n)); } else { Seed(int64(n)+(sec*1e9+nsec)); } return int(Int63n(int64(n))) }

No h mapeamento implcito de valores de um tipo para valores de um outro tipo.


Em substituio s coeres, so adotados casts.

PLP - Linguagem Go

69

Sequenciadores

Sequenciadores

Desvios Incondicionais Escapes Excees

PLP - Linguagem Go

71

Desvios Incondicionais
I: Println(Digite a dimensao: (N)"); var tam int = ReadInt(); if ( tam < 20 && tam > 4) { goto L; } Println(N fora do limite [4,20]."); goto I; L: geraTabuleiro(tam);

Para fazer Desvios Incondicionais usamos a palavra reservada goto S podemos fazer desvios incondicionais dentro do escopo da abstrao de funo. (No podemos ir para pontos mais externos do programa).
PLP - Linguagem Go

72

Escape
for i := 0; i < len(tabuleiro); i++ { for j := 0; j < len(tabuleiro[i]); j++ { if (tabuleiro[i][j] == 9) { Println("Achou bomba na linha ", i+1); break; } }

Iterao afetada pelo escape

Go d suporte a escape atravs da palavra reservadabreak e continue. Escape no rotulado apenas finaliza a iterao corrente.

PLP - Linguagem Go

73

Escape rotulado
busca: for i := 0; i < len(tabuleiro); i++ { for j := 0; j < len(tabuleiro[i]); j++ { if (tabuleiro[i][j] == 9) { Println("Achou bomba na linha ", i+1); break busca; } }

Rtulo Go d suporte a escape rotulado atravs da

palavra reservada break mais o rtulo.

PLP - Linguagem Go

74

Excees
Go no d suporte a excees.

PLP - Linguagem Go

75

Concorrncia

Concorrncia
var canal = make(chan int); func main() { go rotina1(); go rotina2(); } func rotina1(){ var i int = 0; for i = 0; i <= 100; i++ { canal <- i; } } func rotina2(){ for { msg := <- canal; Println(msg); if(msg == 100){ break; } } }

Channel
Goroutines

Go d suporte a concorrncia atravs de goroutines. A comunicao entre os processos concorrentes atravs de channel.

PLP - Linguagem Go

77

Spin-Lock
func acquire(){ for(usandoRecurso){ } usandoRecurso = true;

Flag
} func relinquish(){ usandoRecurso = false; } func rotina1(){ acquire(); //regiao critica relinquish(); } func rotina2(){ acquire(); //regiao critica relinquish(); }

O flag uma varivel global. Assim permitimos que apenas uma rotina tenha acesso ao recurso.
Rotinas

PLP - Linguagem Go

78

Concluso

PLP - Linguagem Go

80

PLP - Linguagem Go

81

Referncias

Referncias

http://alovasconcelos.net/ http://golang.org http://tutorial.danielmazza.info/go RAMALHO, Franklin. Notas de Aula da disciplina Paradigmas de Linguagens de Programao, 2010. http://forum.zwame.pt/showthread.php?t=348920

PLP - Linguagem Go

83