Go: RESTful - Hello World!

De Aulas

Afluentes: Sistemas Distribuídos e Mobile

Exemplo Hello World!

A linguagem Go trouxe, a partir da versão 1.22, algumas ferramentas para tratar com protocolos http e serviços na própria biblioteca padrão net/http. Para iniciar nosso servidor, usaremos o seguinte comando:

router := http.NewServeMux()

E apenas após criar as funções que fazem o tratamento de todos os métodos que vamos precisar, colocaremos nosso servidor no modo listen. Ou seja, ele vai começar a ouvir uma porta do computador, aguardando uma conexão para então responder à requisição.

O comando listen é segue conforme o exemplo abaixo:

err := http.ListenAndServe("localhost:8080", router)
if err != nil {
	fmt.Println(err.Error())
}

Veja que ele retorna se teve erro ou não. Caso o err seja nil não ouve erro, caso contrário algo não funcionou direito e, no exemplo, ele imprime a mensagem de erro na execução do servidor.

No nosso exemplo, estamos usando a porta 8080 do localhost

Tratando os Métodos

Para tratar os métodos web, conforme vistos na aula de Elementos e Protocolos da Web vamos usar a função HandleFunc. Nessa função a gente ou linka uma função ao Handler ou criamos uma função anônima, conforme no exemplo abaixo.

router.HandleFunc("GET /hello", func(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello go REST world!")
})

No primeiro parâmetro da função HandleFunc a gente coloca o MÉTODO que quer tratar, um espaço em branco e então a chamada.

GET /hello

O segundo parâmetro é a função anônima que estamos criando. Caso você queira criar uma função para tratar o método, basta colocar no nome dela nesse parâmetro, conforme exemplo abaixo:

router.HandleFunc("GET /hello", minhaFuncaoHelloWorld)

A função Fprintf envia uma informação para w, nesse caso. que é o buffer de saída http.ResponseWriter, ou seja, o canal de envio de resposta ao cliente.

fmt.Fprintf(w, "Hello go REST world!")

Para consumir/usar esse método você pode usar o Thunder Client do Visual Studio Code, ou o Postman ou algum outro programa para testar os serviços web. No caso do serviço que criamos, você usa:

Método: GET
Chamada: http://localhost:8080/hello

Exemplo Completo

package main

import (
	"fmt"
	"net/http"
)

func main() {
	router := http.NewServeMux()

	router.HandleFunc("GET /hello", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "Hello go REST world!")
	})

	err := http.ListenAndServe("localhost:8080", router)
	if err != nil {
		fmt.Println(err.Error())
	}
}

Compilar, executar, etc

Pra podermos configurar o projeto, a gente vai digitar os seguintes comandos

go mod init

Isso inicializa as configurações do projeto. Esse comando só digita uma vez. Só na criação do projeto. Pode ser executado antes mesmo de criar qualquer linha de código.

go mod tidy

Esse comando configura as dependências

go build

Compila o programa

./meu_programa ou meu_programa.exe

Executa o programa no linux ou no windows. Ele fica funcionando até que você feche o programa com CTRL+C.

Com o programa funcionando, você então pode usar o Thunder Client ou Postman para testar o serviço.