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. 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.