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())
	}
}