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.