Go: RESTful - Hello World!
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
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.