SlideShare a Scribd company logo
1 of 44
Download to read offline
Introdução a
linguagem Go
Allisson Azevedo
http://allissonazevedo.com
FLISol Campina Grande 2015
História
• 2007 - Design
• Robert Griesemer (HotSpot/V8)
• Rob Pike (Unix/UTF-8)
• Ken Thompson (Unix/UTF-8/B e C)
• 2009 - Open Source
• http://golang.org/doc/faq#history
Características
• Compilada
• Tipagem estática
• Sintaxe simples
• Visibilidade pela primeira letra do símbolo
• Concorrência (Goroutines)
• Garbage collector
• Ótima biblioteca padrão
The Gopher
Quem esta usando?
https://speakerdeck.com/ftmamud/golang
Por onde iniciar?
• http://golang.org/doc/install
• http://tour.golang.org/
• http://play.golang.org/
• http://www.golang-book.com/
• http://www.golangbootcamp.com/
Hello World
// Definição do pacote
package main
// Import do pacote fmt
import "fmt"
// Definição da função main
func main() {
// Executa a função Println do pacote fmt
fmt.Println("Hello World")
}
Variavéis
package main
import "fmt"
var nome string
func main() {
nome = "Allisson"
fmt.Println("Olá " + nome)
// retorna Olá Allisson
}
Variavéis
package main
import "fmt"
var nome string = "Allisson"
func main() {
fmt.Println("Olá " + nome)
// retorna Olá Allisson
}
Variavéis
package main
import "fmt"
var nome = "Allisson"
func main() {
fmt.Println("Olá " + nome)
// retorna Olá Allisson
}
Variavéis
package main
import "fmt"
func main() {
nome := "Allisson"
fmt.Println("Olá " + nome)
// retorna Olá Allisson
}
Variavéis
package main
import "fmt"
var (
nome = "Allisson"
sobrenome = "Azevedo"
)
func main() {
fmt.Println("Olá " + nome + " " + sobrenome)
// retorna Olá Allisson Azevedo
}
Variavéis
package main
import "fmt"
var (
nome, sobrenome = "Allisson", "Azevedo"
)
func main() {
fmt.Println("Olá " + nome + " " + sobrenome)
// retorna Olá Allisson Azevedo
}
Variavéis
package main
import "fmt"
var (
nome, sobrenome = "Allisson", "Azevedo"
idade = 32
)
func main() {
fmt.Println("Olá " + nome + " " + sobrenome)
// retorna Olá Allisson Azevedo
fmt.Println(32)
// retorna 32
}
Constantes
package main
import "fmt"
const Pi = 3.14
const (
StatusOK = 200
StatusNotFound = 404
)
func main() {
fmt.Println(Pi)
// retorna 3.14
fmt.Println(StatusOK)
// retorna 200
fmt.Println(StatusNotFound)
// retorna 404
}
Pacotes e Imports
package main
import "fmt"
import "log"
func main() {
log.Println("Iniciando o programa")
fmt.Println("Hello World")
}
Pacotes e Imports
package main
import (
"fmt"
"log"
)
func main() {
log.Println("Iniciando o programa")
fmt.Println("Hello World")
}
Pacotes e Imports
package main
// go get code.google.com/p/go-uuid/uuid
import (
"code.google.com/p/go-uuid/uuid"
"fmt"
"log"
)
func main() {
log.Println("Iniciando o programa")
fmt.Println("Hello World")
fmt.Println(uuid.NewRandom())
}
Funções
package main
import "fmt"
func soma(x, y int) int {
return x + y
}
func main() {
fmt.Print("2 + 2 = ")
fmt.Println(soma(2, 2))
}
Funções
package main
import (
"fmt"
"strings"
)
func nomeSobrenome(nome string) (string, string) {
return strings.Split(nome, " ")[0], strings.Split(nome, " ")[1]
}
func main() {
nome, sobrenome := nomeSobrenome("Allisson Azevedo")
fmt.Println("Nome = " + nome)
fmt.Println("Sobrenome = " + sobrenome)
}
Funções
package main
import (
"fmt"
"strings"
)
func nomeSobrenome(nomeCompleto string) (nome, sobrenome string) {
nome = strings.Split(nomeCompleto, " ")[0]
sobrenome = strings.Split(nomeCompleto, " ")[1]
return
}
func main() {
nome, sobrenome := nomeSobrenome("Allisson Azevedo")
fmt.Println("Nome = " + nome)
fmt.Println("Sobrenome = " + sobrenome)
}
Ponteiros
package main
import "fmt"
func main() {
a := 10
b := a
c := &a
b = 20
*c = 30
fmt.Println(a)
// retorna 30
fmt.Println(b)
// retorna 20
fmt.Println(*c)
// retorna 30
}
Ponteiros
package main
import "fmt"
func zera1(valor int) {
valor = 0
}
func zera2(valor *int) {
*valor = 0
}
func main() {
valor := 10
zera1(valor)
fmt.Println(valor)
// retorna 10
zera2(&valor)
fmt.Println(valor)
// retorna 0
}
Structs
package main
import "fmt"
type Pessoa struct {
Nome string
Idade int
}
func main() {
pessoa := Pessoa{Nome: "Fulano", Idade: 1}
fmt.Println(pessoa.Nome)
fmt.Println(pessoa.Idade)
allisson := &pessoa
allisson.Nome = "Allisson"
allisson.Idade = 32
fmt.Println(pessoa.Nome)
fmt.Println(pessoa.Idade)
}
Structs
package main
import "fmt"
type Numero struct {
X int
}
func (n Numero) Dobro() int {
n.X = n.X * 2
return n.X
}
func (n *Numero) Dobro2() int {
n.X = n.X * 2
return n.X
}
func main() {
numero := Numero{X: 10}
fmt.Println(numero.Dobro())
fmt.Println(numero.X)
fmt.Println(numero.Dobro2())
fmt.Println(numero.X)
}
Structs
package main
import "fmt"
type Pessoa struct {
Nome string
}
type Funcionario struct {
Pessoa
Mat int
}
func main() {
funcionario := Funcionario{}
funcionario.Nome = "Allisson"
funcionario.Mat = 12345
fmt.Println(funcionario.Nome)
fmt.Println(funcionario.Mat)
}
Structs
package main
import "fmt"
type Pessoa struct {
Nome string
}
type Funcionario struct {
Pessoa
Mat int
}
func main() {
funcionario := Funcionario{Pessoa{Nome: "Allisson"}, 12345}
fmt.Println(funcionario.Nome)
fmt.Println(funcionario.Mat)
}
Interfacespackage main
import "fmt"
type FiguraGeometrica interface {
area() int
}
type Quadrado struct {
Lado int
}
func (q Quadrado) area() int {
return q.Lado * 2
}
type Retangulo struct {
Comprimento, Largura int
}
func (r Retangulo) area() int {
return r.Comprimento * r.Largura
}
func CalculaArea(f FiguraGeometrica) {
fmt.Println(f.area())
}
func main() {
quadrado := Quadrado{Lado: 5}
retangulo := Retangulo{Comprimento: 5, Largura: 10}
CalculaArea(quadrado)
CalculaArea(retangulo)
}
Tratamento de erros
package main
import (
"fmt"
"io/ioutil"
"log"
)
func main() {
file, err := ioutil.ReadFile("arquivo.invalido")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(file))
}
Tratamento de erros
package main
import (
"errors"
"fmt"
"log"
)
func Dividir(x, y int) (int, error) {
if y == 0 {
return 0, errors.New("Proibida divisão por zero.")
}
return x / y, nil
}
func main() {
valor, err := Dividir(10, 0)
if err != nil {
log.Fatal(err)
}
fmt.Println(valor)
}
Defer
package main
import "fmt"
func main() {
defer fmt.Println("World")
fmt.Println("Hello")
}
Defer
package main
import (
"log"
"os"
)
func main() {
file, err := os.Create("teste.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
file.WriteString("Teste do defer")
}
Slices
package main
import "fmt"
func main() {
alunos := make([]string, 3)
fmt.Println(alunos)
alunos[0] = "Fulano"
alunos[1] = "Beltrano"
alunos[2] = "Cicrano"
fmt.Println(alunos)
alunos = append(alunos, "Zezinho")
fmt.Println(alunos)
fmt.Println(alunos[2:4])
}
Range
package main
import "fmt"
func main() {
alunos := make([]string, 3)
alunos[0] = "Fulano"
alunos[1] = "Beltrano"
alunos[2] = "Cicrano"
for i, value := range alunos {
fmt.Println("Posição:", i, "Valor:", value)
}
}
Maps
package main
import "fmt"
func main() {
m := make(map[string]int)
m["Allisson"] = 32
m["Chuck Norris"] = 75
fmt.Println(m["Allisson"])
fmt.Println(m["Chuck Norris"])
}
Maps
package main
import "fmt"
func main() {
m := map[string]int{
"Allisson": 32,
"Chuck Norris": 75,
}
fmt.Println(m["Allisson"])
fmt.Println(m["Chuck Norris"])
}
Maps
package main
import "fmt"
func main() {
m := make(map[string]int)
m["Teste"] = 30
fmt.Println("O valor é:", m["Teste"])
m["Teste"] = 31
fmt.Println("O valor é:", m["Teste"])
delete(m, "Teste")
fmt.Println("O valor é:", m["Teste"])
_, ok := m["Teste"]
if ok == false {
fmt.Println("O valor Teste não existe")
}
}
Maps
package main
import "fmt"
func main() {
m := make(map[string]int)
m["Allisson"] = 32
m["Chuck Norris"] = 75
for k, v := range m {
fmt.Println("Chave:", k, "Valor:", v)
}
}
Goroutines
package main
import (
"fmt"
"time"
)
func digaoi(s string) {
fmt.Println("Dizendo oi de:", s)
}
func main() {
go digaoi("Goroutine")
digaoi("Normal")
time.Sleep(100 * time.Millisecond)
}
Goroutines
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"time"
)
func fetch(s string) {
res, err := http.Get(s)
if err != nil {
log.Println("Não foi possível conectar com a url", s)
return
}
body, err := ioutil.ReadAll(res.Body)
fmt.Println("A página:", s, "Tem o tamanho de:", len(string(body)))
}
func main() {
go fetch("http://www.google.com.br")
fetch("http://www.uol.com.br")
time.Sleep(5000 * time.Millisecond)
}
Goroutinespackage main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func fetch(s string, channel chan string) {
res, err := http.Get(s)
if err != nil {
log.Println("Não foi possível conectar com a url", s)
return
}
body, err := ioutil.ReadAll(res.Body)
result := fmt.Sprintf("A página: %s, Tem o tamanho de %d", s, len(string(body)))
channel <- result
}
func main() {
channel := make(chan string)
go fetch("http://linuxmint.com/", channel)
go fetch("http://www.ubuntu.com/", channel)
go fetch("http://www.debian.org/", channel)
go fetch("http://www.opensuse.org/en/", channel)
go fetch("http://getfedora.org/", channel)
for i := 0; i < 5; i++ {
fmt.Println(<-channel)
}
}
HTTP Server
package main
import (
"io"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "Hello world!")
}
func main() {
http.HandleFunc("/", index)
http.ListenAndServe(":8080", nil)
}
Mais exemplos
• Thumbnail server
• Static http server
• Gogs.io
Obrigado!

More Related Content

What's hot

Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with DebuggingPART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with DebuggingFastBit Embedded Brain Academy
 
protothread and its usage in contiki OS
protothread and its usage in contiki OSprotothread and its usage in contiki OS
protothread and its usage in contiki OSSalah Amean
 
QEMU - Binary Translation
QEMU - Binary Translation QEMU - Binary Translation
QEMU - Binary Translation Jiann-Fuh Liaw
 
Python debugging techniques
Python debugging techniquesPython debugging techniques
Python debugging techniquesTuomas Suutari
 
PYTHON -Chapter 2 - Functions, Exception, Modules and Files -MAULIK BOR...
PYTHON -Chapter 2 - Functions,   Exception, Modules  and    Files -MAULIK BOR...PYTHON -Chapter 2 - Functions,   Exception, Modules  and    Files -MAULIK BOR...
PYTHON -Chapter 2 - Functions, Exception, Modules and Files -MAULIK BOR...Maulik Borsaniya
 
Go Programming Language (Golang)
Go Programming Language (Golang)Go Programming Language (Golang)
Go Programming Language (Golang)Ishin Vin
 
Guaranteeing Memory Safety in Rust
Guaranteeing Memory Safety in RustGuaranteeing Memory Safety in Rust
Guaranteeing Memory Safety in Rustnikomatsakis
 
Memory ECC - The Comprehensive of SEC-DED.
Memory ECC - The Comprehensive of SEC-DED. Memory ECC - The Comprehensive of SEC-DED.
Memory ECC - The Comprehensive of SEC-DED. Sk Cheah
 
Best Practices in Qt Quick/QML - Part 3
Best Practices in Qt Quick/QML - Part 3Best Practices in Qt Quick/QML - Part 3
Best Practices in Qt Quick/QML - Part 3ICS
 
MIPI DevCon 2016: A Developer's Guide to MIPI I3C Implementation
MIPI DevCon 2016: A Developer's Guide to MIPI I3C ImplementationMIPI DevCon 2016: A Developer's Guide to MIPI I3C Implementation
MIPI DevCon 2016: A Developer's Guide to MIPI I3C ImplementationMIPI Alliance
 
Scheduling in Android
Scheduling in AndroidScheduling in Android
Scheduling in AndroidOpersys inc.
 
Aula 02 - Escolha caso
Aula 02 - Escolha casoAula 02 - Escolha caso
Aula 02 - Escolha casoEder Samaniego
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot frameworkClaudenir Freitas
 
An introduction to Google test framework
An introduction to Google test frameworkAn introduction to Google test framework
An introduction to Google test frameworkAbner Chih Yi Huang
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best PracticesTheo Jungeblut
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 

What's hot (20)

Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with DebuggingPART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
 
protothread and its usage in contiki OS
protothread and its usage in contiki OSprotothread and its usage in contiki OS
protothread and its usage in contiki OS
 
QEMU - Binary Translation
QEMU - Binary Translation QEMU - Binary Translation
QEMU - Binary Translation
 
Python debugging techniques
Python debugging techniquesPython debugging techniques
Python debugging techniques
 
PYTHON -Chapter 2 - Functions, Exception, Modules and Files -MAULIK BOR...
PYTHON -Chapter 2 - Functions,   Exception, Modules  and    Files -MAULIK BOR...PYTHON -Chapter 2 - Functions,   Exception, Modules  and    Files -MAULIK BOR...
PYTHON -Chapter 2 - Functions, Exception, Modules and Files -MAULIK BOR...
 
Go Programming Language (Golang)
Go Programming Language (Golang)Go Programming Language (Golang)
Go Programming Language (Golang)
 
Clean Code na Prática
Clean Code na PráticaClean Code na Prática
Clean Code na Prática
 
Guaranteeing Memory Safety in Rust
Guaranteeing Memory Safety in RustGuaranteeing Memory Safety in Rust
Guaranteeing Memory Safety in Rust
 
Maven nutshell
Maven nutshellMaven nutshell
Maven nutshell
 
Memory ECC - The Comprehensive of SEC-DED.
Memory ECC - The Comprehensive of SEC-DED. Memory ECC - The Comprehensive of SEC-DED.
Memory ECC - The Comprehensive of SEC-DED.
 
Best Practices in Qt Quick/QML - Part 3
Best Practices in Qt Quick/QML - Part 3Best Practices in Qt Quick/QML - Part 3
Best Practices in Qt Quick/QML - Part 3
 
MIPI DevCon 2016: A Developer's Guide to MIPI I3C Implementation
MIPI DevCon 2016: A Developer's Guide to MIPI I3C ImplementationMIPI DevCon 2016: A Developer's Guide to MIPI I3C Implementation
MIPI DevCon 2016: A Developer's Guide to MIPI I3C Implementation
 
Scheduling in Android
Scheduling in AndroidScheduling in Android
Scheduling in Android
 
Aula 02 - Escolha caso
Aula 02 - Escolha casoAula 02 - Escolha caso
Aula 02 - Escolha caso
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot framework
 
An introduction to Google test framework
An introduction to Google test frameworkAn introduction to Google test framework
An introduction to Google test framework
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best Practices
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 

Viewers also liked

Deploy completo de uma aplicação Django
Deploy completo de uma aplicação DjangoDeploy completo de uma aplicação Django
Deploy completo de uma aplicação DjangoAllisson Azevedo
 
Consumindo API's OAuth{1,2} com Python
Consumindo API's OAuth{1,2} com PythonConsumindo API's OAuth{1,2} com Python
Consumindo API's OAuth{1,2} com PythonAllisson Azevedo
 
Tarefas Assíncronas com Django e Celery
Tarefas Assíncronas com Django e CeleryTarefas Assíncronas com Django e Celery
Tarefas Assíncronas com Django e CeleryAllisson Azevedo
 
"Go" Contra ou a favor? Já vale a pena investir nessa linguagem?
"Go" Contra ou a favor? Já vale a pena investir nessa linguagem?"Go" Contra ou a favor? Já vale a pena investir nessa linguagem?
"Go" Contra ou a favor? Já vale a pena investir nessa linguagem?José Yoshiriro
 
Construindo um Servidor Web com GO
Construindo um Servidor Web com GOConstruindo um Servidor Web com GO
Construindo um Servidor Web com GOBeto Muniz
 
Otimizando sites com o nosql redis
Otimizando sites com o nosql redisOtimizando sites com o nosql redis
Otimizando sites com o nosql redisAllisson Azevedo
 
Tratamento de exceções em GO
Tratamento de exceções em GOTratamento de exceções em GO
Tratamento de exceções em GOKarla Tahan
 
Seminário sobre GO
Seminário sobre GOSeminário sobre GO
Seminário sobre GOgptavares
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosAdriano Teixeira de Souza
 
Customizando Admin do Django
Customizando Admin do DjangoCustomizando Admin do Django
Customizando Admin do DjangoGustavo Carvalho
 
Asynchronous programming in Python
Asynchronous programming in PythonAsynchronous programming in Python
Asynchronous programming in PythonAurynn Shaw
 

Viewers also liked (20)

Docker + Django
Docker + DjangoDocker + Django
Docker + Django
 
Deploy completo de uma aplicação Django
Deploy completo de uma aplicação DjangoDeploy completo de uma aplicação Django
Deploy completo de uma aplicação Django
 
Consumindo API's OAuth{1,2} com Python
Consumindo API's OAuth{1,2} com PythonConsumindo API's OAuth{1,2} com Python
Consumindo API's OAuth{1,2} com Python
 
Tarefas Assíncronas com Django e Celery
Tarefas Assíncronas com Django e CeleryTarefas Assíncronas com Django e Celery
Tarefas Assíncronas com Django e Celery
 
"Go" Contra ou a favor? Já vale a pena investir nessa linguagem?
"Go" Contra ou a favor? Já vale a pena investir nessa linguagem?"Go" Contra ou a favor? Já vale a pena investir nessa linguagem?
"Go" Contra ou a favor? Já vale a pena investir nessa linguagem?
 
Linguagem Go
Linguagem GoLinguagem Go
Linguagem Go
 
Construindo um Servidor Web com GO
Construindo um Servidor Web com GOConstruindo um Servidor Web com GO
Construindo um Servidor Web com GO
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
Otimizando sites com o nosql redis
Otimizando sites com o nosql redisOtimizando sites com o nosql redis
Otimizando sites com o nosql redis
 
Introdução ao Django
Introdução ao DjangoIntrodução ao Django
Introdução ao Django
 
Tratamento de exceções em GO
Tratamento de exceções em GOTratamento de exceções em GO
Tratamento de exceções em GO
 
Seminário sobre GO
Seminário sobre GOSeminário sobre GO
Seminário sobre GO
 
Go Lang
Go LangGo Lang
Go Lang
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 
Wiki-wiki S/A
Wiki-wiki S/AWiki-wiki S/A
Wiki-wiki S/A
 
Python Nordeste 2016
Python Nordeste 2016Python Nordeste 2016
Python Nordeste 2016
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
Customizando Admin do Django
Customizando Admin do DjangoCustomizando Admin do Django
Customizando Admin do Django
 
Asynchronous programming in Python
Asynchronous programming in PythonAsynchronous programming in Python
Asynchronous programming in Python
 

Similar to Introdução a linguagem Go

Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Wilson Júnior
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesDevCamp Campinas
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocosRicardo Bolanho
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tksamuelthiago
 
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...iMasters
 
Programação Funcional (para humanos)
Programação Funcional (para humanos)Programação Funcional (para humanos)
Programação Funcional (para humanos)Pedro Castilho
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Alamo Saravali
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Beljug2010
Beljug2010Beljug2010
Beljug2010UFPA
 
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Tutorial dev cpp   002 - criação, leitura e alteração de arquivosTutorial dev cpp   002 - criação, leitura e alteração de arquivos
Tutorial dev cpp 002 - criação, leitura e alteração de arquivosFlávio Freitas
 
Linguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosLinguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosRegis Magalhães
 
Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4guestd521d1f
 
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...Danilo J. S. Bellini
 

Similar to Introdução a linguagem Go (20)

Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional Interfaces
 
Python 03
Python 03Python 03
Python 03
 
Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tk
 
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
 
Introdução a Go
Introdução a GoIntrodução a Go
Introdução a Go
 
Programação Funcional (para humanos)
Programação Funcional (para humanos)Programação Funcional (para humanos)
Programação Funcional (para humanos)
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Beljug2010
Beljug2010Beljug2010
Beljug2010
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Tutorial dev cpp   002 - criação, leitura e alteração de arquivosTutorial dev cpp   002 - criação, leitura e alteração de arquivos
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
 
Linguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosLinguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros Passos
 
Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4
 
Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4
 
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
 

More from Allisson Azevedo

Programação Assíncrona com Asyncio
Programação Assíncrona com AsyncioProgramação Assíncrona com Asyncio
Programação Assíncrona com AsyncioAllisson Azevedo
 
Construindo um micro framework web em Python
Construindo um micro framework web em PythonConstruindo um micro framework web em Python
Construindo um micro framework web em PythonAllisson Azevedo
 
Desenvolvimento Web com Django
Desenvolvimento Web com DjangoDesenvolvimento Web com Django
Desenvolvimento Web com DjangoAllisson Azevedo
 
Ecossistema Python Para Web
Ecossistema Python Para WebEcossistema Python Para Web
Ecossistema Python Para WebAllisson Azevedo
 
Empacotamento Rpm Na Pratica
Empacotamento Rpm Na PraticaEmpacotamento Rpm Na Pratica
Empacotamento Rpm Na PraticaAllisson Azevedo
 
Criando Pacotes Rpm Para O Fedora
Criando Pacotes Rpm Para O FedoraCriando Pacotes Rpm Para O Fedora
Criando Pacotes Rpm Para O FedoraAllisson Azevedo
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOLAllisson Azevedo
 
Ruby on Rails Enecomp 2008
Ruby on Rails Enecomp 2008Ruby on Rails Enecomp 2008
Ruby on Rails Enecomp 2008Allisson Azevedo
 
Desenvolvendo uma distribuição Linux - Projeto Fedora
Desenvolvendo uma distribuição Linux - Projeto FedoraDesenvolvendo uma distribuição Linux - Projeto Fedora
Desenvolvendo uma distribuição Linux - Projeto FedoraAllisson Azevedo
 

More from Allisson Azevedo (11)

Programação Assíncrona com Asyncio
Programação Assíncrona com AsyncioProgramação Assíncrona com Asyncio
Programação Assíncrona com Asyncio
 
Construindo um micro framework web em Python
Construindo um micro framework web em PythonConstruindo um micro framework web em Python
Construindo um micro framework web em Python
 
Desenvolvimento Web com Django
Desenvolvimento Web com DjangoDesenvolvimento Web com Django
Desenvolvimento Web com Django
 
Ecossistema Python Para Web
Ecossistema Python Para WebEcossistema Python Para Web
Ecossistema Python Para Web
 
Palestra iv-ensol-nosql
Palestra iv-ensol-nosqlPalestra iv-ensol-nosql
Palestra iv-ensol-nosql
 
Empacotamento Rpm Na Pratica
Empacotamento Rpm Na PraticaEmpacotamento Rpm Na Pratica
Empacotamento Rpm Na Pratica
 
Criando Pacotes Rpm Para O Fedora
Criando Pacotes Rpm Para O FedoraCriando Pacotes Rpm Para O Fedora
Criando Pacotes Rpm Para O Fedora
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOL
 
Ruby on Rails Enecomp 2008
Ruby on Rails Enecomp 2008Ruby on Rails Enecomp 2008
Ruby on Rails Enecomp 2008
 
Desenvolvendo uma distribuição Linux - Projeto Fedora
Desenvolvendo uma distribuição Linux - Projeto FedoraDesenvolvendo uma distribuição Linux - Projeto Fedora
Desenvolvendo uma distribuição Linux - Projeto Fedora
 
RESTful Web Services
RESTful Web ServicesRESTful Web Services
RESTful Web Services
 

Introdução a linguagem Go

  • 1. Introdução a linguagem Go Allisson Azevedo http://allissonazevedo.com FLISol Campina Grande 2015
  • 2. História • 2007 - Design • Robert Griesemer (HotSpot/V8) • Rob Pike (Unix/UTF-8) • Ken Thompson (Unix/UTF-8/B e C) • 2009 - Open Source • http://golang.org/doc/faq#history
  • 3. Características • Compilada • Tipagem estática • Sintaxe simples • Visibilidade pela primeira letra do símbolo • Concorrência (Goroutines) • Garbage collector • Ótima biblioteca padrão
  • 6. Por onde iniciar? • http://golang.org/doc/install • http://tour.golang.org/ • http://play.golang.org/ • http://www.golang-book.com/ • http://www.golangbootcamp.com/
  • 7. Hello World // Definição do pacote package main // Import do pacote fmt import "fmt" // Definição da função main func main() { // Executa a função Println do pacote fmt fmt.Println("Hello World") }
  • 8. Variavéis package main import "fmt" var nome string func main() { nome = "Allisson" fmt.Println("Olá " + nome) // retorna Olá Allisson }
  • 9. Variavéis package main import "fmt" var nome string = "Allisson" func main() { fmt.Println("Olá " + nome) // retorna Olá Allisson }
  • 10. Variavéis package main import "fmt" var nome = "Allisson" func main() { fmt.Println("Olá " + nome) // retorna Olá Allisson }
  • 11. Variavéis package main import "fmt" func main() { nome := "Allisson" fmt.Println("Olá " + nome) // retorna Olá Allisson }
  • 12. Variavéis package main import "fmt" var ( nome = "Allisson" sobrenome = "Azevedo" ) func main() { fmt.Println("Olá " + nome + " " + sobrenome) // retorna Olá Allisson Azevedo }
  • 13. Variavéis package main import "fmt" var ( nome, sobrenome = "Allisson", "Azevedo" ) func main() { fmt.Println("Olá " + nome + " " + sobrenome) // retorna Olá Allisson Azevedo }
  • 14. Variavéis package main import "fmt" var ( nome, sobrenome = "Allisson", "Azevedo" idade = 32 ) func main() { fmt.Println("Olá " + nome + " " + sobrenome) // retorna Olá Allisson Azevedo fmt.Println(32) // retorna 32 }
  • 15. Constantes package main import "fmt" const Pi = 3.14 const ( StatusOK = 200 StatusNotFound = 404 ) func main() { fmt.Println(Pi) // retorna 3.14 fmt.Println(StatusOK) // retorna 200 fmt.Println(StatusNotFound) // retorna 404 }
  • 16. Pacotes e Imports package main import "fmt" import "log" func main() { log.Println("Iniciando o programa") fmt.Println("Hello World") }
  • 17. Pacotes e Imports package main import ( "fmt" "log" ) func main() { log.Println("Iniciando o programa") fmt.Println("Hello World") }
  • 18. Pacotes e Imports package main // go get code.google.com/p/go-uuid/uuid import ( "code.google.com/p/go-uuid/uuid" "fmt" "log" ) func main() { log.Println("Iniciando o programa") fmt.Println("Hello World") fmt.Println(uuid.NewRandom()) }
  • 19. Funções package main import "fmt" func soma(x, y int) int { return x + y } func main() { fmt.Print("2 + 2 = ") fmt.Println(soma(2, 2)) }
  • 20. Funções package main import ( "fmt" "strings" ) func nomeSobrenome(nome string) (string, string) { return strings.Split(nome, " ")[0], strings.Split(nome, " ")[1] } func main() { nome, sobrenome := nomeSobrenome("Allisson Azevedo") fmt.Println("Nome = " + nome) fmt.Println("Sobrenome = " + sobrenome) }
  • 21. Funções package main import ( "fmt" "strings" ) func nomeSobrenome(nomeCompleto string) (nome, sobrenome string) { nome = strings.Split(nomeCompleto, " ")[0] sobrenome = strings.Split(nomeCompleto, " ")[1] return } func main() { nome, sobrenome := nomeSobrenome("Allisson Azevedo") fmt.Println("Nome = " + nome) fmt.Println("Sobrenome = " + sobrenome) }
  • 22. Ponteiros package main import "fmt" func main() { a := 10 b := a c := &a b = 20 *c = 30 fmt.Println(a) // retorna 30 fmt.Println(b) // retorna 20 fmt.Println(*c) // retorna 30 }
  • 23. Ponteiros package main import "fmt" func zera1(valor int) { valor = 0 } func zera2(valor *int) { *valor = 0 } func main() { valor := 10 zera1(valor) fmt.Println(valor) // retorna 10 zera2(&valor) fmt.Println(valor) // retorna 0 }
  • 24. Structs package main import "fmt" type Pessoa struct { Nome string Idade int } func main() { pessoa := Pessoa{Nome: "Fulano", Idade: 1} fmt.Println(pessoa.Nome) fmt.Println(pessoa.Idade) allisson := &pessoa allisson.Nome = "Allisson" allisson.Idade = 32 fmt.Println(pessoa.Nome) fmt.Println(pessoa.Idade) }
  • 25. Structs package main import "fmt" type Numero struct { X int } func (n Numero) Dobro() int { n.X = n.X * 2 return n.X } func (n *Numero) Dobro2() int { n.X = n.X * 2 return n.X } func main() { numero := Numero{X: 10} fmt.Println(numero.Dobro()) fmt.Println(numero.X) fmt.Println(numero.Dobro2()) fmt.Println(numero.X) }
  • 26. Structs package main import "fmt" type Pessoa struct { Nome string } type Funcionario struct { Pessoa Mat int } func main() { funcionario := Funcionario{} funcionario.Nome = "Allisson" funcionario.Mat = 12345 fmt.Println(funcionario.Nome) fmt.Println(funcionario.Mat) }
  • 27. Structs package main import "fmt" type Pessoa struct { Nome string } type Funcionario struct { Pessoa Mat int } func main() { funcionario := Funcionario{Pessoa{Nome: "Allisson"}, 12345} fmt.Println(funcionario.Nome) fmt.Println(funcionario.Mat) }
  • 28. Interfacespackage main import "fmt" type FiguraGeometrica interface { area() int } type Quadrado struct { Lado int } func (q Quadrado) area() int { return q.Lado * 2 } type Retangulo struct { Comprimento, Largura int } func (r Retangulo) area() int { return r.Comprimento * r.Largura } func CalculaArea(f FiguraGeometrica) { fmt.Println(f.area()) } func main() { quadrado := Quadrado{Lado: 5} retangulo := Retangulo{Comprimento: 5, Largura: 10} CalculaArea(quadrado) CalculaArea(retangulo) }
  • 29. Tratamento de erros package main import ( "fmt" "io/ioutil" "log" ) func main() { file, err := ioutil.ReadFile("arquivo.invalido") if err != nil { log.Fatal(err) } fmt.Println(string(file)) }
  • 30. Tratamento de erros package main import ( "errors" "fmt" "log" ) func Dividir(x, y int) (int, error) { if y == 0 { return 0, errors.New("Proibida divisão por zero.") } return x / y, nil } func main() { valor, err := Dividir(10, 0) if err != nil { log.Fatal(err) } fmt.Println(valor) }
  • 31. Defer package main import "fmt" func main() { defer fmt.Println("World") fmt.Println("Hello") }
  • 32. Defer package main import ( "log" "os" ) func main() { file, err := os.Create("teste.txt") if err != nil { log.Fatal(err) } defer file.Close() file.WriteString("Teste do defer") }
  • 33. Slices package main import "fmt" func main() { alunos := make([]string, 3) fmt.Println(alunos) alunos[0] = "Fulano" alunos[1] = "Beltrano" alunos[2] = "Cicrano" fmt.Println(alunos) alunos = append(alunos, "Zezinho") fmt.Println(alunos) fmt.Println(alunos[2:4]) }
  • 34. Range package main import "fmt" func main() { alunos := make([]string, 3) alunos[0] = "Fulano" alunos[1] = "Beltrano" alunos[2] = "Cicrano" for i, value := range alunos { fmt.Println("Posição:", i, "Valor:", value) } }
  • 35. Maps package main import "fmt" func main() { m := make(map[string]int) m["Allisson"] = 32 m["Chuck Norris"] = 75 fmt.Println(m["Allisson"]) fmt.Println(m["Chuck Norris"]) }
  • 36. Maps package main import "fmt" func main() { m := map[string]int{ "Allisson": 32, "Chuck Norris": 75, } fmt.Println(m["Allisson"]) fmt.Println(m["Chuck Norris"]) }
  • 37. Maps package main import "fmt" func main() { m := make(map[string]int) m["Teste"] = 30 fmt.Println("O valor é:", m["Teste"]) m["Teste"] = 31 fmt.Println("O valor é:", m["Teste"]) delete(m, "Teste") fmt.Println("O valor é:", m["Teste"]) _, ok := m["Teste"] if ok == false { fmt.Println("O valor Teste não existe") } }
  • 38. Maps package main import "fmt" func main() { m := make(map[string]int) m["Allisson"] = 32 m["Chuck Norris"] = 75 for k, v := range m { fmt.Println("Chave:", k, "Valor:", v) } }
  • 39. Goroutines package main import ( "fmt" "time" ) func digaoi(s string) { fmt.Println("Dizendo oi de:", s) } func main() { go digaoi("Goroutine") digaoi("Normal") time.Sleep(100 * time.Millisecond) }
  • 40. Goroutines package main import ( "fmt" "io/ioutil" "log" "net/http" "time" ) func fetch(s string) { res, err := http.Get(s) if err != nil { log.Println("Não foi possível conectar com a url", s) return } body, err := ioutil.ReadAll(res.Body) fmt.Println("A página:", s, "Tem o tamanho de:", len(string(body))) } func main() { go fetch("http://www.google.com.br") fetch("http://www.uol.com.br") time.Sleep(5000 * time.Millisecond) }
  • 41. Goroutinespackage main import ( "fmt" "io/ioutil" "log" "net/http" ) func fetch(s string, channel chan string) { res, err := http.Get(s) if err != nil { log.Println("Não foi possível conectar com a url", s) return } body, err := ioutil.ReadAll(res.Body) result := fmt.Sprintf("A página: %s, Tem o tamanho de %d", s, len(string(body))) channel <- result } func main() { channel := make(chan string) go fetch("http://linuxmint.com/", channel) go fetch("http://www.ubuntu.com/", channel) go fetch("http://www.debian.org/", channel) go fetch("http://www.opensuse.org/en/", channel) go fetch("http://getfedora.org/", channel) for i := 0; i < 5; i++ { fmt.Println(<-channel) } }
  • 42. HTTP Server package main import ( "io" "net/http" ) func index(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "Hello world!") } func main() { http.HandleFunc("/", index) http.ListenAndServe(":8080", nil) }
  • 43. Mais exemplos • Thumbnail server • Static http server • Gogs.io