SlideShare uma empresa Scribd logo
Go
Imperativa, Estruturada e Concorrente
Introdução
História
Motivação
Características
História
▪ Google ― 2009
▪ Open Source
▪ A lenda
▪ Compilador Experimental
▪ V1.0 ― 2012
Rob Pike Ken ThompsonRobert Griesemer
Motivação
▪ Frustração com linguagens e
ambientes existentes
▪ Compilação eficiente ou execução
eficiente ou facilidade de
programação
▪ Objetivos simples:
▫ ter a rapidez do C
▫ ser mais legível
▫ programadores mais produtivos
Características
▪ Garbage Collector
▪ Compila muito rápido
▪ Incrivelmente ‘leve’ em
termos de uso de memória
▪ Muito boa para programas
concorrentes
Nomenclatura
Nomenclatura
▪ A sintaxe é descrita usando EBNF
▪ 25 palavras-chave
▪ Nome antes de tipo
▪ Ponteiros (semelhante à C)
▫ Porém, sem aritmética
▪ Escopo estático
▫ Pacote, Função, For
▫ Bloco podem ser aninhados
Nomenclatura
▪ Visibilidade (diferentes pacotes)
▫ Nomes iniciados com
■ Maiúscula: são públicos
■ minúscula: são privados
▪ Não permite sobrecarga
▪ Ponto e vírgula invisível
Tipagem
Tipagem
▪ Tipagem estática
▪ Fortemente tipada
▪ Equivalência de tipos
▫ Equivalência de nome, não há
equivalência estrutural
Parece tipagem dinâmica
var x int = 5
var x = 5
x := 5
Tipagem
Tipos básicos:
▫ bool
▫ string
▫ int int8 int16 int32 int64
▫ uint uint8 uint16 uint32 uint64 uintptr
▫ byte (pseudônimo para uint8)
▫ rune (pseudônimo para int32)
(ponto de código Unicode)
▫ float32 float64
▫ complex64 complex128
Tipagem
▪ Tipos compostos
▫ Ponteiros
■ &(endereço de) e *(desreferenciação)
▫ Structs
■ Pode ser recursivo
▫ Matrizes
■ Não podem ser redimensionadas
▫ Slices
■ Dinamicamente redimensionada
■ Referência para matriz
Tipagem
▪ Tipos compostos
▫ Maps
▫ Interfaces
■ Conjunto de funções
▫ Funções
■ Mesmos parâmetros e mesmo tipo de
retorno
▫ Canais
■ Mecanismo para comunicação de
funções concorrentes
Funções
e algo mais...
Funções
▪ Go possui:
▫ Funções
▫ Procedimentos
▫ Métodos
▪ Passagem de parâmetro
▫ Padrão: por valor
▫ Por referência somente com ponteiro
Principais áreas de uso do GO
● Aplicações de Servidor
● Big Data
● Processamento de Imagem
● Núcleo de apps Web complexos
● Criptografia
Não possui
● Tratamento de exceção
● Herança de tipos
● Programação genérica
● Asserções
● Conversão numérica implícita
● Ternários (expressão ? uma coisa : outra coisa)
● Compilação com variáveis ou
importações não utilizadas
Mini-tutorial
Estruturas de Controle
Sem Parênteses
for i := 0; i < 10; i++ {
soma += i
}
if x < 0 {
return sqrt(-x) + "i"
}
Estruturas de Controle
Sem DO
Sem WHILE
func main() {
soma := 1
for soma < 1000 {
soma += soma
} // for é o while de Go
fmt.Println(soma)
}
Estruturas de Controle
IF e SWITCH aceitam instrução de
inicialização
if v := math.Pow(x, n); v<10 {
return v
}
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
case "linux":
fmt.Println("Linux.")
default:
// freebsd, openbsd,
// plan9, windows...
fmt.Printf("%s.", os)
}
Estruturas de Controle
Rótulo em BREAK e CONTINUE
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;
}
}
}
Matrizes
func main() {
var a [2]string
a[0] = "Hello"
a[1] = "World"
fmt.Println(a[0], a[1])
fmt.Println(a)
primos := [6]int{2, 3, 5, 7, 11, 13}
fmt.Println(primos)
}
Slices
func main() {
primos := [6]int{2, 3, 5, 7, 11, 13}
var s []int = primos[1:4]
fmt.Println(s)
}
Interfaces e “Polimorfismo”
type Funcionário interface {
Id()
}
type Pessoa struct {
Nome string
}
//Esse método diz que o tipo T
//implementa a interface I,
//mas não precisamos explicitamente
//declarar isso
func (p Pessoa) Id() {
fmt.Println(p.Nome)
}
func main() {
var f Funcionário =
Pessoa{"hello"}
f.Id()
}
Outros detalhes
Funções com múltiplos retornos
func troca(x, y string) (string, string) {
return y, x
}
func main() {
a, b := troca("hello", "world")
fmt.Println(a, b)
}
Outros detalhes
Funções de primeira-classe
package main
import (
"fmt"
)
type StringFoo func() string
func ok() string{
return "tá OK"
}
func pegaUmaFuncao(foo StringFoo){
fmt.Printf("função foo retorna:
%vn", foo())
}
func main(){
pegaUmaFuncao(ok)
}
Outros detalhes
Funções variádicas
func soma(nums ...int) {
fmt.Print(nums, " ")
total := 0
for _, num := range nums {
total += num
}
fmt.Println(total)
}
func main() {
soma(1, 2)
soma(1, 2, 3)
nums := []int{1, 2, 3, 4}
soma(nums...)
}
Concorrência
▪ Goroutines
package main
import (
"fmt"
"time"
)
func dizer(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100*time.Millisecond)
fmt.Println(s)
}
}
func main() {
go dizer("world")
dizer("hello")
}
Concorrência
▪ Channels
package main
import "fmt"
func soma(s []int, c chan int) {
soma := 0
for _, v := range s {
soma += v
}
c <- soma //manda soma para c
}
func main() {
s := []int{7, 2, 8, -9, 4, 0}
c := make(chan int)
go soma(s[:len(s)/2], c)
go soma(s[len(s)/2:], c)
x, y := <-c, <-c // recebe de c
fmt.Println(x, y, x+y)
}
Obrigado!
Dúvidas?

Mais conteúdo relacionado

Mais procurados

Funções em C
Funções em CFunções em C
Funções em C
Elaine Cecília Gatto
 
Javascript
Javascript Javascript
Javascript
Ramon Oliveira
 
Zope
ZopeZope
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
Leonardo Lima
 
Filas encadeadas
Filas encadeadasFilas encadeadas
Filas encadeadas
Fabiana Lorenzi
 
Lp m2(parte4)
Lp m2(parte4)Lp m2(parte4)
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
Regis Magalhães
 
OOP (in portuguese)
OOP (in portuguese)OOP (in portuguese)
OOP (in portuguese)
Bruno Pedro
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript Funcional
Emanuel Gonçalves
 
Pipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoPipeline desdobramento escalonamento
Pipeline desdobramento escalonamento
Elaine Cecília Gatto
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
Mauricio Wieler
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
profwtelles
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
Marcos Castro
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
Natan Mai
 
Programacao funcional
Programacao funcionalProgramacao funcional
Programacao funcional
Deivis Wingert
 

Mais procurados (15)

Funções em C
Funções em CFunções em C
Funções em C
 
Javascript
Javascript Javascript
Javascript
 
Zope
ZopeZope
Zope
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
Filas encadeadas
Filas encadeadasFilas encadeadas
Filas encadeadas
 
Lp m2(parte4)
Lp m2(parte4)Lp m2(parte4)
Lp m2(parte4)
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 
OOP (in portuguese)
OOP (in portuguese)OOP (in portuguese)
OOP (in portuguese)
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript Funcional
 
Pipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoPipeline desdobramento escalonamento
Pipeline desdobramento escalonamento
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Programacao funcional
Programacao funcionalProgramacao funcional
Programacao funcional
 

Semelhante a Linguagens de programação - Go

Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
Eder Magalhães
 
11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf
FernandoHenriquedaSi16
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação C
JoberthSilva
 
Programando em Go
Programando em GoProgramando em Go
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
Sérgio Souza Costa
 
Go
Go Go
Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
Ramon Oliveira
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
Sérgio Souza Costa
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
apolllorj
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptx
MarceloRosenbrock1
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
Bruno Catão
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
Francis Wagner
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
José Volmei Dal Prá Junior
 
Iniciando com javaScript 2017
Iniciando com javaScript 2017Iniciando com javaScript 2017
Iniciando com javaScript 2017
Romualdo Andre
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
Felipe
 
Qual linguagem escolher?
Qual linguagem escolher?Qual linguagem escolher?
Qual linguagem escolher?
COTIC-PROEG (UFPA)
 
Linguagem de Programação Estruturada com Java-Aula2
Linguagem de Programação Estruturada com Java-Aula2Linguagem de Programação Estruturada com Java-Aula2
Linguagem de Programação Estruturada com Java-Aula2
Elvis Araújo
 
Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3
klaussilveira
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
Thiago Cifani
 
javascript_funcional.pdf
javascript_funcional.pdfjavascript_funcional.pdf
javascript_funcional.pdf
ronaldo ramos
 

Semelhante a Linguagens de programação - Go (20)

Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf11-codigo-limpo-parte-4.pdf
11-codigo-limpo-parte-4.pdf
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação C
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Go
Go Go
Go
 
Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptx
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
Iniciando com javaScript 2017
Iniciando com javaScript 2017Iniciando com javaScript 2017
Iniciando com javaScript 2017
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
 
Qual linguagem escolher?
Qual linguagem escolher?Qual linguagem escolher?
Qual linguagem escolher?
 
Linguagem de Programação Estruturada com Java-Aula2
Linguagem de Programação Estruturada com Java-Aula2Linguagem de Programação Estruturada com Java-Aula2
Linguagem de Programação Estruturada com Java-Aula2
 
Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
javascript_funcional.pdf
javascript_funcional.pdfjavascript_funcional.pdf
javascript_funcional.pdf
 

Mais de Marcos Paulo Maia dos Santos

Inclusão Digital - Conceitos básicos de informática
Inclusão Digital - Conceitos básicos de informáticaInclusão Digital - Conceitos básicos de informática
Inclusão Digital - Conceitos básicos de informática
Marcos Paulo Maia dos Santos
 
Linguagens não recursivamente enumeráveis e Hierarquia de Chomsky
Linguagens não recursivamente enumeráveis e Hierarquia de ChomskyLinguagens não recursivamente enumeráveis e Hierarquia de Chomsky
Linguagens não recursivamente enumeráveis e Hierarquia de Chomsky
Marcos Paulo Maia dos Santos
 
Regressão simbólica - Resolvendo problemas de planejamento não-determinísticos
Regressão simbólica - Resolvendo problemas de planejamento não-determinísticosRegressão simbólica - Resolvendo problemas de planejamento não-determinísticos
Regressão simbólica - Resolvendo problemas de planejamento não-determinísticos
Marcos Paulo Maia dos Santos
 
Problema da Árvore Geradora de Rotulação Mínima (PAGRM)
Problema da Árvore Geradora de Rotulação Mínima (PAGRM)Problema da Árvore Geradora de Rotulação Mínima (PAGRM)
Problema da Árvore Geradora de Rotulação Mínima (PAGRM)
Marcos Paulo Maia dos Santos
 
Introdução a ciência de dados com Python
Introdução a ciência de dados com PythonIntrodução a ciência de dados com Python
Introdução a ciência de dados com Python
Marcos Paulo Maia dos Santos
 
Applied plotting, charting & data representation in Python (pt. 2)
Applied plotting, charting & data representation in Python (pt. 2)Applied plotting, charting & data representation in Python (pt. 2)
Applied plotting, charting & data representation in Python (pt. 2)
Marcos Paulo Maia dos Santos
 
Resolução de problemas por meio de busca
Resolução de problemas por meio de buscaResolução de problemas por meio de busca
Resolução de problemas por meio de busca
Marcos Paulo Maia dos Santos
 
Planejamento em Inteligência Artificial
Planejamento em Inteligência ArtificialPlanejamento em Inteligência Artificial
Planejamento em Inteligência Artificial
Marcos Paulo Maia dos Santos
 
Planejamento como verificação de modelos
Planejamento como verificação de modelosPlanejamento como verificação de modelos
Planejamento como verificação de modelos
Marcos Paulo Maia dos Santos
 
Diagramas de decisão binária
Diagramas de decisão bináriaDiagramas de decisão binária
Diagramas de decisão binária
Marcos Paulo Maia dos Santos
 
Planejamento em Inteligência Artificial
Planejamento em Inteligência ArtificialPlanejamento em Inteligência Artificial
Planejamento em Inteligência Artificial
Marcos Paulo Maia dos Santos
 

Mais de Marcos Paulo Maia dos Santos (11)

Inclusão Digital - Conceitos básicos de informática
Inclusão Digital - Conceitos básicos de informáticaInclusão Digital - Conceitos básicos de informática
Inclusão Digital - Conceitos básicos de informática
 
Linguagens não recursivamente enumeráveis e Hierarquia de Chomsky
Linguagens não recursivamente enumeráveis e Hierarquia de ChomskyLinguagens não recursivamente enumeráveis e Hierarquia de Chomsky
Linguagens não recursivamente enumeráveis e Hierarquia de Chomsky
 
Regressão simbólica - Resolvendo problemas de planejamento não-determinísticos
Regressão simbólica - Resolvendo problemas de planejamento não-determinísticosRegressão simbólica - Resolvendo problemas de planejamento não-determinísticos
Regressão simbólica - Resolvendo problemas de planejamento não-determinísticos
 
Problema da Árvore Geradora de Rotulação Mínima (PAGRM)
Problema da Árvore Geradora de Rotulação Mínima (PAGRM)Problema da Árvore Geradora de Rotulação Mínima (PAGRM)
Problema da Árvore Geradora de Rotulação Mínima (PAGRM)
 
Introdução a ciência de dados com Python
Introdução a ciência de dados com PythonIntrodução a ciência de dados com Python
Introdução a ciência de dados com Python
 
Applied plotting, charting & data representation in Python (pt. 2)
Applied plotting, charting & data representation in Python (pt. 2)Applied plotting, charting & data representation in Python (pt. 2)
Applied plotting, charting & data representation in Python (pt. 2)
 
Resolução de problemas por meio de busca
Resolução de problemas por meio de buscaResolução de problemas por meio de busca
Resolução de problemas por meio de busca
 
Planejamento em Inteligência Artificial
Planejamento em Inteligência ArtificialPlanejamento em Inteligência Artificial
Planejamento em Inteligência Artificial
 
Planejamento como verificação de modelos
Planejamento como verificação de modelosPlanejamento como verificação de modelos
Planejamento como verificação de modelos
 
Diagramas de decisão binária
Diagramas de decisão bináriaDiagramas de decisão binária
Diagramas de decisão binária
 
Planejamento em Inteligência Artificial
Planejamento em Inteligência ArtificialPlanejamento em Inteligência Artificial
Planejamento em Inteligência Artificial
 

Último

História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 

Último (8)

História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 

Linguagens de programação - Go

  • 3. História ▪ Google ― 2009 ▪ Open Source ▪ A lenda ▪ Compilador Experimental ▪ V1.0 ― 2012 Rob Pike Ken ThompsonRobert Griesemer
  • 4. Motivação ▪ Frustração com linguagens e ambientes existentes ▪ Compilação eficiente ou execução eficiente ou facilidade de programação ▪ Objetivos simples: ▫ ter a rapidez do C ▫ ser mais legível ▫ programadores mais produtivos
  • 5. Características ▪ Garbage Collector ▪ Compila muito rápido ▪ Incrivelmente ‘leve’ em termos de uso de memória ▪ Muito boa para programas concorrentes
  • 7. Nomenclatura ▪ A sintaxe é descrita usando EBNF ▪ 25 palavras-chave ▪ Nome antes de tipo ▪ Ponteiros (semelhante à C) ▫ Porém, sem aritmética ▪ Escopo estático ▫ Pacote, Função, For ▫ Bloco podem ser aninhados
  • 8. Nomenclatura ▪ Visibilidade (diferentes pacotes) ▫ Nomes iniciados com ■ Maiúscula: são públicos ■ minúscula: são privados ▪ Não permite sobrecarga ▪ Ponto e vírgula invisível
  • 10. Tipagem ▪ Tipagem estática ▪ Fortemente tipada ▪ Equivalência de tipos ▫ Equivalência de nome, não há equivalência estrutural Parece tipagem dinâmica var x int = 5 var x = 5 x := 5
  • 11. Tipagem Tipos básicos: ▫ bool ▫ string ▫ int int8 int16 int32 int64 ▫ uint uint8 uint16 uint32 uint64 uintptr ▫ byte (pseudônimo para uint8) ▫ rune (pseudônimo para int32) (ponto de código Unicode) ▫ float32 float64 ▫ complex64 complex128
  • 12. Tipagem ▪ Tipos compostos ▫ Ponteiros ■ &(endereço de) e *(desreferenciação) ▫ Structs ■ Pode ser recursivo ▫ Matrizes ■ Não podem ser redimensionadas ▫ Slices ■ Dinamicamente redimensionada ■ Referência para matriz
  • 13. Tipagem ▪ Tipos compostos ▫ Maps ▫ Interfaces ■ Conjunto de funções ▫ Funções ■ Mesmos parâmetros e mesmo tipo de retorno ▫ Canais ■ Mecanismo para comunicação de funções concorrentes
  • 15. Funções ▪ Go possui: ▫ Funções ▫ Procedimentos ▫ Métodos ▪ Passagem de parâmetro ▫ Padrão: por valor ▫ Por referência somente com ponteiro
  • 16. Principais áreas de uso do GO ● Aplicações de Servidor ● Big Data ● Processamento de Imagem ● Núcleo de apps Web complexos ● Criptografia
  • 17. Não possui ● Tratamento de exceção ● Herança de tipos ● Programação genérica ● Asserções ● Conversão numérica implícita ● Ternários (expressão ? uma coisa : outra coisa) ● Compilação com variáveis ou importações não utilizadas
  • 19. Estruturas de Controle Sem Parênteses for i := 0; i < 10; i++ { soma += i } if x < 0 { return sqrt(-x) + "i" }
  • 20. Estruturas de Controle Sem DO Sem WHILE func main() { soma := 1 for soma < 1000 { soma += soma } // for é o while de Go fmt.Println(soma) }
  • 21. Estruturas de Controle IF e SWITCH aceitam instrução de inicialização if v := math.Pow(x, n); v<10 { return v } switch os := runtime.GOOS; os { case "darwin": fmt.Println("OS X.") case "linux": fmt.Println("Linux.") default: // freebsd, openbsd, // plan9, windows... fmt.Printf("%s.", os) }
  • 22. Estruturas de Controle Rótulo em BREAK e CONTINUE 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; } } }
  • 23. Matrizes func main() { var a [2]string a[0] = "Hello" a[1] = "World" fmt.Println(a[0], a[1]) fmt.Println(a) primos := [6]int{2, 3, 5, 7, 11, 13} fmt.Println(primos) }
  • 24. Slices func main() { primos := [6]int{2, 3, 5, 7, 11, 13} var s []int = primos[1:4] fmt.Println(s) }
  • 25. Interfaces e “Polimorfismo” type Funcionário interface { Id() } type Pessoa struct { Nome string } //Esse método diz que o tipo T //implementa a interface I, //mas não precisamos explicitamente //declarar isso func (p Pessoa) Id() { fmt.Println(p.Nome) } func main() { var f Funcionário = Pessoa{"hello"} f.Id() }
  • 26. Outros detalhes Funções com múltiplos retornos func troca(x, y string) (string, string) { return y, x } func main() { a, b := troca("hello", "world") fmt.Println(a, b) }
  • 27. Outros detalhes Funções de primeira-classe package main import ( "fmt" ) type StringFoo func() string func ok() string{ return "tá OK" } func pegaUmaFuncao(foo StringFoo){ fmt.Printf("função foo retorna: %vn", foo()) } func main(){ pegaUmaFuncao(ok) }
  • 28. Outros detalhes Funções variádicas func soma(nums ...int) { fmt.Print(nums, " ") total := 0 for _, num := range nums { total += num } fmt.Println(total) } func main() { soma(1, 2) soma(1, 2, 3) nums := []int{1, 2, 3, 4} soma(nums...) }
  • 29. Concorrência ▪ Goroutines package main import ( "fmt" "time" ) func dizer(s string) { for i := 0; i < 5; i++ { time.Sleep(100*time.Millisecond) fmt.Println(s) } } func main() { go dizer("world") dizer("hello") }
  • 30. Concorrência ▪ Channels package main import "fmt" func soma(s []int, c chan int) { soma := 0 for _, v := range s { soma += v } c <- soma //manda soma para c } func main() { s := []int{7, 2, 8, -9, 4, 0} c := make(chan int) go soma(s[:len(s)/2], c) go soma(s[len(s)/2:], c) x, y := <-c, <-c // recebe de c fmt.Println(x, y, x+y) }