Download - Introdução a linguagem Go
![Page 1: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/1.jpg)
Introdução a linguagem Go
Allisson Azevedo http://allissonazevedo.com
FLISol Campina Grande 2015
![Page 2: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/2.jpg)
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
![Page 3: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/3.jpg)
Características• Compilada
• Tipagem estática
• Sintaxe simples
• Visibilidade pela primeira letra do símbolo
• Concorrência (Goroutines)
• Garbage collector
• Ótima biblioteca padrão
![Page 4: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/4.jpg)
The Gopher
![Page 5: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/5.jpg)
Quem esta usando?
https://speakerdeck.com/ftmamud/golang
![Page 6: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/6.jpg)
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/
![Page 7: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/7.jpg)
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")
}
![Page 8: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/8.jpg)
Variavéispackage main
import "fmt"
var nome string
func main() { nome = "Allisson" fmt.Println("Olá " + nome) // retorna Olá Allisson
}
![Page 9: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/9.jpg)
Variavéis
package main
import "fmt"
var nome string = "Allisson"
func main() { fmt.Println("Olá " + nome) // retorna Olá Allisson
}
![Page 10: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/10.jpg)
Variavéis
package main
import "fmt"
var nome = "Allisson"
func main() { fmt.Println("Olá " + nome) // retorna Olá Allisson
}
![Page 11: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/11.jpg)
Variavéis
package main
import "fmt"
func main() { nome := "Allisson" fmt.Println("Olá " + nome) // retorna Olá Allisson
}
![Page 12: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/12.jpg)
Variavéispackage main
import "fmt"
var ( nome = "Allisson" sobrenome = "Azevedo"
)
func main() { fmt.Println("Olá " + nome + " " + sobrenome) // retorna Olá Allisson Azevedo
}
![Page 13: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/13.jpg)
Variavéispackage main
import "fmt"
var ( nome, sobrenome = "Allisson", "Azevedo"
)
func main() { fmt.Println("Olá " + nome + " " + sobrenome) // retorna Olá Allisson Azevedo
}
![Page 14: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/14.jpg)
Variavéispackage 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
}
![Page 15: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/15.jpg)
Constantespackage 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
}
![Page 16: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/16.jpg)
Pacotes e Imports
package main
import "fmt" import "log"
func main() { log.Println("Iniciando o programa") fmt.Println("Hello World")
}
![Page 17: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/17.jpg)
Pacotes e Importspackage main
import ( "fmt" "log"
)
func main() { log.Println("Iniciando o programa") fmt.Println("Hello World")
}
![Page 18: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/18.jpg)
Pacotes e Importspackage 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())
}
![Page 19: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/19.jpg)
Funçõespackage main
import "fmt"
func soma(x, y int) int { return x + y
}
func main() { fmt.Print("2 + 2 = ") fmt.Println(soma(2, 2))
}
![Page 20: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/20.jpg)
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)
}
![Page 21: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/21.jpg)
Funçõespackage 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)
}
![Page 22: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/22.jpg)
Ponteirospackage 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
}
![Page 23: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/23.jpg)
Ponteirospackage 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
}
![Page 24: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/24.jpg)
Structspackage 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)
}
![Page 25: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/25.jpg)
Structspackage 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)
}
![Page 26: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/26.jpg)
Structspackage 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)
}
![Page 27: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/27.jpg)
Structspackage 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)
}
![Page 28: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/28.jpg)
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)
}
![Page 29: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/29.jpg)
Tratamento de errospackage main
import ( "fmt" "io/ioutil" "log"
)
func main() { file, err := ioutil.ReadFile("arquivo.invalido") if err != nil {
log.Fatal(err) }
fmt.Println(string(file)) }
![Page 30: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/30.jpg)
Tratamento de errospackage 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) }
![Page 31: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/31.jpg)
Defer
package main
import "fmt"
func main() { defer fmt.Println("World") fmt.Println("Hello")
}
![Page 32: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/32.jpg)
Deferpackage 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") }
![Page 33: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/33.jpg)
Slicespackage 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]) }
![Page 34: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/34.jpg)
Rangepackage 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)
} }
![Page 35: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/35.jpg)
Mapspackage 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"])
}
![Page 36: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/36.jpg)
Mapspackage main
import "fmt"
func main() { m := map[string]int{
"Allisson": 32, "Chuck Norris": 75,
}
fmt.Println(m["Allisson"]) fmt.Println(m["Chuck Norris"])
}
![Page 37: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/37.jpg)
Mapspackage 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") }
}
![Page 38: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/38.jpg)
Mapspackage 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)
}
}
![Page 39: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/39.jpg)
Goroutinespackage 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)
}
![Page 40: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/40.jpg)
Goroutinespackage 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)
}
![Page 41: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/41.jpg)
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)
} }
![Page 42: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/42.jpg)
HTTP Serverpackage 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)
}
![Page 43: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/43.jpg)
Mais exemplos
• Thumbnail server
• Static http server
• Gogs.io
![Page 44: Introdução a linguagem Go](https://reader033.vdocuments.com.br/reader033/viewer/2022051016/55a9f0a11a28aba3418b4783/html5/thumbnails/44.jpg)
Obrigado!