
Nesse artigo, veja como criar uma API com GoLang. Para você ter um overview, iremos criar uma API para cadastro de pessoas. Não vou abordar a instalação do Go. Caso você ainda não tenha ele instalado, você pode seguir os passos desse artigo:
Antes de começarmos a desenvolver, precisamos criar um novo diretório dentro do nosso workspace. Para esse artigo, utilizaremos um computador com Windows 10. O caminho do meu workspace ficou:
C:\go\src\github.com\programadrirano\person\.
O nosso primeiro passo será a criação de um novo arquivo chamado main.go, esse será o nosso arquivo root. Em seguida, precisaremos de um editor de textos. Para esse artigo iremos utilizar o Visual Studio Code. Com o arquivo aberto no seu VS Code, atualize ele com o código abaixo:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"github.com/gorilla/mux"
)
func main() {
rotas := mux.NewRouter().StrictSlash(true)
rotas.HandleFunc("/", getAll).Methods("GET")
rotas.HandleFunc("/persons", create).Methods("POST")
var port = ":3000"
fmt.Println("Server running in port:", port)
log.Fatal(http.ListenAndServe(port, rotas))
}
type Person struct {
Name string
}
var persons = []Person{
Person{Name: "Heisenberg"},
Person{Name: "Pinkman"},
}
func getAll(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(persons)
}
func create(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
var p Person
body, err := ioutil.ReadAll(r.Body)
if err != nil {
panic(err)
}
if err := r.Body.Close(); err != nil {
panic(err)
}
if err := json.Unmarshal(body, &p); err != nil {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(422)
if err := json.NewEncoder(w).Encode(err); err != nil {
panic(err)
}
}
json.Unmarshal(body, &p)
persons = append(persons, p)
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusCreated)
if err := json.NewEncoder(w).Encode(p); err != nil {
panic(err)
}
}
Vamos entender passo a passo o nosso código:
Linha 3 a 11: Estamos importando os pacotes necessários para nossa aplicação.
Nas linhas 13 a 22, nós temos:
- 14: Estamos inicializando a nossa rota, passando o valor true para ScrictSlash. Basicamente ele nos permite trabalhar com as nossas rotas da seguinte forma: /rota e dessa /rota/, para mais detalhes sobre ele, segue link da sua documentação.
- 16: Estamos criando a nossa rota GET, no primeiro parâmetro nós passamos a rota, no segundo, o nome do método que irá responder a nossa chamada e no final, o Verbo HTTP que utilizaremos.
- 17: A nossa rota para criação, seguindo os passos da linha 16.
- 18: Variável com a porta que iremos utilizar para nossa API.
- 19: Estamos printando em nosso console, a porta que estamos utilizando.
- 20: Estamos passando a porta e as nossas rotas para o listen do pacote HTTP.
Nas linhas 24 a 32, estamos criando um modulo chamado Person e inicializando ele com dois valores.
Nas linhas 34 a 37, criamos o nosso método getAll com dois parâmetros Response e Request e estamos retornando os valores do array que criamos acima.
Por fim, nas linhas 39 a 71, temos:
- 40 e 41: Estamos configurando o nosso header, setando o seu Content-type.
- 42: Estamos criando uma variável com o valor da nossa model Person.
- 44: Estamos recebendo os valores do nosso request e passando para duas variáveis body e err.
- 46 a 61: Criamos algumas validações, como: se o erro é diferente de nil, se o arquivo veio vazio, e retornamos para o usuário.
- 63: Estamos fazendo um parse para o nosso Objeto.
- 65: Como não estamos trabalhando com banco de dados, nós adicionamos o valor no nosso array.
- 68 a 72: Finalizamos o nosso método retornando o status 201 de criado e o objeto que o nosso usuário enviou.
Agora, para que possamos testar, execute o comando go run .\main.go no seu terminal, ele irá exibir uma mensagem com a porta no seu console. Podemos ver essa execução na imagem abaixo:

Nosso próximo passo será testar as nossas rotas. Para isso, abra o endereço no seu navegador: http://localhost:3000/ e caso tudo esteja ok, você receberá o objeto abaixo:
[
{
Name: "Heisenberg"
},
{
Name: "Pinkman"
}
]
Agora, para testarmos o cadastro, iremos utilizar o Postman, ferramenta gratuita que nos auxilia nos testes a requisições HTTP. Com ele aberto, preencha os campos conforme está na imagem abaixo e clique em enviar.

Por fim, volte no seu método GET e perceba que nós temos um novo registro em nosso retorno.
Caso tenha interesse em baixar a versão final do código desse artigo, segue o seu link no GitHub.




