Go é uma linguagem de programação interessante para construir aplicações web modernas, bem como software de sistema. Ele criou um grande burburinho após seu lançamento e potencializa serviços como Docker, Kubernetes, Terraform, Dropbox e Netflix .
Além disso, a robusta coleção de pacotes integrados do Go o torna uma ótima opção para programação web. Este artigo mostrará como escrever um servidor web básico em Go.
Importe os pacotes necessários
O pacote net/HTTP fornece tudo o que é necessário para criar um servidor e cliente web. Este pacote apresenta algumas funções úteis para lidar com programação web.
Você pode importá-lo adicionando a linha abaixo ao início do seu código-fonte:
import "net/http"
O artigo também usará o pacote fmt para formatar strings e o pacote log para tratar erros. Você pode importá-los individualmente conforme mostrado acima ou importar todos os pacotes usando uma única instrução import:
import (
"fmt"
"log"
"net/http"
)
Você pode continuar escrevendo a função principal após importar os pacotes necessários. Vá em frente e salve o arquivo de origem com a extensão .go . Se você estiver usando o Vim , use o comando abaixo para salvar e sair do Vim:
:wq server.go
Escreva a função principal
Os programas Go residem diretamente na função principal, apropriadamente chamada de "principal". Você precisará fazer uma chamada de servidor aqui. Adicione as seguintes linhas ao código-fonte e veja o que elas fazem:
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
O exemplo está definindo a função principal usando a palavra-chave func . Go tem regras rígidas sobre a posição da chave de abertura, portanto, certifique-se de que a chave inicial esteja na linha correta. A primeira instrução em main define que todas as solicitações da web para o caminho raiz ( "/" ) serão tratadas pelo índice, uma função do tipo http.HandlerFunc .
A segunda linha inicia o servidor web através da função http.ListenAndServe . Ele sinaliza ao servidor para escutar continuamente as solicitações HTTP recebidas na porta 8080 do servidor. O segundo parâmetro desta função é necessário para bloquear o programa até o final.
Como http.ListenAndServe sempre retorna um erro, o exemplo envolve essa chamada dentro de uma log.Fatal call . Esta instrução registra quaisquer mensagens de erro geradas no lado do servidor.
Implementar funções de processamento
Como você pode ver, a função principal chama o índice da função do manipulador para lidar com as solicitações do cliente. Porém, o exemplo ainda não definiu esta funcionalidade para seu servidor.
Vamos adicionar as instruções necessárias para tornar a função de índice utilizável:
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
Esta função aceita dois argumentos diferentes do tipo http.ResponseWriter e http.Request . O parâmetro http.ResponseWriter contém a resposta do servidor à solicitação recebida, na forma de um objeto http.Request .
A função Fprintf do pacote fmt é usada para exibir e manipular strings de texto. O artigo usa isso para exibir a resposta do servidor às solicitações da web. Finalmente, o elemento r.URL.Path[1:] é usado para buscar dados após o caminho raiz.
Adicione todas as partes restantes
Seu servidor web Go estará pronto assim que você adicionar todos os componentes restantes. O código ficará assim:
import (
"fmt"
"log"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
A primeira linha é necessária para compilar o código do servidor web Go como um arquivo executável.

Compile este código do servidor web Go como um arquivo executável