-
Notifications
You must be signed in to change notification settings - Fork 1
/
minicurso.slide
150 lines (93 loc) · 4.96 KB
/
minicurso.slide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
Minicurso - GO APIs
Desenvolvendo API utilizando a Linguagem de Programação Go
Tags: Go, Go Programming Language, Golang, API
Nassor Paulino da Silva
Google Developers Group - Floripa
https://google.com/+NassorPaulinodaSilva
https://github.com/rossan
http://plus.google.com/+DesenvolvedoresGoogle
http://codigo-google.blogspot.com.br
https://plus.google.com/109245804055148797587
* Aviso
Esta é uma palestra independente. As opiniões expressas nesta palestra são de responsabilidade minha e não devem de forma alguma serem associadas ao Google.
.image slides/assets/GDG_logo.png
* Aviso [2]
A parte de integração com Angular.js não vai rolar, pois ela estava implementada como aplicação Android + Apache Cordova e não iria ser interessante uma máquina virtual dentro da outra! [decidi não arriscar].
Em contra partida adicionei mais conteúdo e exemplos! _^.^_
* Quem sou eu?
- Desde de 3 de julho de 1994 aplicando a filosofia hacker no dia-a-dia
- Early Adopter de Linguagens de Programação
Programar == Lego
- Usuário Linux desde 1996
Não tenho saudades alguma do meu Slackware
- Empresário e Professor para comer e dormir.
- Formado em Ciência da Computação na Universidade do Sul de Santa Catarina
- Um dos organizadores do Grupo de Desenvolvedores Google - Floripa
_sessão_ego_termina_aqui..._
* Metodologia
- Esqueça o slide, o que importa é o código!
git clone https://github.com/rossan/seccom-2014.git
- Código bonito, se conhece outro editor sinta-se a vontade
sudo yum install gedit
* O Início
- Instalando o Go! [[http://golang.org/doc/install]]
.image slides/assets/golang-gopher.jpg
* $GOPATH
- É a variável de ambiente mais importante de todo projeto Go
- É para facilitar o desenvolvimento é recomendado utilizar um $GOPATH global
- Mas caso você prefira separar tudo bem separadinho:
> cd seccom-2014
> export GOPATH=`pwd`
* Primeiro Programa
E ai está ele, o único, útil e poderoso: Hello World!
cmd/helloworld/helloworld.go
Partiu pra linha de comando:
go build
rm helloworld
go install
ls $GOPATH/bin
* Hello World - No seu browser!
- o pacote *net/http* contém as primitivas necessárias para se trabalhar com http;
- o tipo *HandlerFunc* é uma função de dois parametros específicos: *(ResponseWriter,**Request)*;
- qualquer objeto que implemente a *interface*http.Handler*, i.e. o método *ServeHTTP(ResponseWriter,**Request)*, é pode ser adicionado ao servidor Web;
- interface em Go é muita diversão!
... ok código!
* Hello World - Como saber se esta tudo ok?
*TESTES*UNITÁRIOS!*
- Go possui um pacote, extremamente enxuto para realização de testes *"testing"*!
- Para testar qualquer coisas basta adicionar a palavra *Test* na frente do nome um método, dentro de um arquivo <nomearquivo>_test.go
- Para testar serviços web também é bem simples, o pacote *"net/http/httptest"*, possui as facilitadores para execução de testes
Código...
* Simplificando as coisas
Apesar de ter uma biblioteca padrão extremamente rica e ser possível fazer muita coisa só com ela, algumas bibliotecas externas aliviam bastante o processo de desenvolvimento de APIs.
* Routing
Definir rotas utilizando a API padrão pode ser um processo lento e repetitivo
- Lento por exigir muitas vezes códigos de análise de string dependendo da URL passada
- Repetitivo pela necessidade de ter que fazer isso a quase todo momento.
Iremos contornar esse retrabalho utilizando a biblioteca *"github.com/gorilla/mux"*
...
* Middleware
É uma API REST, você precisa muito além de apenas os endpoints funcionando corretamente. Log, Gestão de Erros, muitas vezes até distribuição de arquivos estáticos. Além disso, seria muito interessante adicionar novos recursos de forma simples.
Existe uma variedade extensa de middlewares, micro-frameworkds, frameworks... sem tempo para explicar todos. Vamos utilizar o *"github.com/codegangsta/negroni"*.
...
* Estamos falando de API WEB então: JSON nela!
Estamos montando uma API para uma página web consumir, então entregaremos os dados de forma estruturada.
Opção mais utilizada pelos sites para comunicação de serviços: [[http://json.org/][JSON]]
Iremos adicionar o suporte a entrega de json pela aplicação utilizando biblioteca: *"gopkg.in/unrolled/render.v1"*
...
* Persistência
Um teste de persistência utilizando o MongoDB!
Há drivers para uma infinidade outras formas de persistir dados, mas o MongoDB é mais novidade!
O driver de acesso do MongoDB é o [[http://labix.org/mgo]], que é distribuido utilizando o caminho *"gopkg.in/mgo.v2"*
...
* Dando continuidade...
- [[https://golang.org]] - Página oficial
- [[https://godoc.org]] - Concentrador de documentação de bibliotecas
- [[https://groups.google.com/forum/#!forum/golang-nuts]] - Fórum de usuários
- [[http://golang-book.com]]
- [[http://www.golangbr.org]]
- [[https://groups.google.com/forum/#!forum/golang-brasil]]
- [[http://gopheracademy.com]]
- [[http://goinggo.net]]
- Comunidades de Go do Google+!