Mudanças entre as edições de "Go: RESTful - Hello World!"
(Criou página com '{{Special:Allpages}} Teste') |
|||
Linha 1: | Linha 1: | ||
− | + | = 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 <code>net/http</code>. Para iniciar nosso servidor, usaremos o seguinte comando: | |
+ | |||
+ | <syntaxhighlight lang=go> | ||
+ | router := http.NewServeMux() | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <syntaxhighlight lang=go> | ||
+ | err := http.ListenAndServe("localhost:8080", router) | ||
+ | if err != nil { | ||
+ | fmt.Println(err.Error()) | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Veja que ele retorna se teve erro ou não. Caso o <code>err</code> seja <code>nil</code> 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 <code>8080</code> do <code>localhost</code> | ||
+ | |||
+ | == Tratando os Métodos == | ||
+ | |||
+ | Para tratar os métodos web, conforme vistos na aula de [https://saulo.arisa.com.br/wiki/index.php/Elementos_e_Protocolos_da_World_Wide_Web#M.C3.A9todos Elementos e Protocolos da Web] vamos usar a função <code>HandleFunc</code>. Nessa função a gente ou linka uma função ao Handler ou criamos uma função anônima, conforme no exemplo abaixo. | ||
+ | |||
+ | <syntaxhighlight lang=go> | ||
+ | router.HandleFunc("GET /hello", func(w http.ResponseWriter, r *http.Request) { | ||
+ | fmt.Fprintf(w, "Hello go REST world!") | ||
+ | }) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Veja que no primeiro parâmetro da função <code>HandleFunc</code> a gente coloca o MÉTODO que quer tratar, um espaço em branco e então a chamada. | ||
+ | |||
+ | <pre> | ||
+ | GET /hello | ||
+ | </pre> | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <syntaxhighlight lang=go> | ||
+ | router.HandleFunc("GET /hello", minhaFuncaoHelloWorld) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Para consumir 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: <code>GET</code> | ||
+ | Chamada: <code>http://localhost:8080/hello</code> | ||
+ | |||
+ | == Exemplo Completo == | ||
+ | |||
+ | <syntaxhighlight lang=go> | ||
+ | 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()) | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> |
Edição das 11h19min de 1 de março de 2024
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!")
})
Veja que 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)
Para consumir 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())
}
}