Go by Example: HTTP Server

Escribir un servidor HTTP básico es fácil usando el paquete net/http.

package main
import (
    "fmt"
    "net/http"
)

Un concepto fundamental en los servidores net/http son los manejadores (handlers). Un manejador es un objeto que implementa la interfaz http.Handler. Una forma común de escribir un manejador es utilizando el adaptador http.HandlerFunc en funciones con la firma apropiada.

func hello(w http.ResponseWriter, req *http.Request) {

Las funciones que sirven como manejadores toman un http.ResponseWriter y un http.Request como argumentos. El escritor de respuesta se utiliza para completar la respuesta HTTP. Aquí nuestra simple respuesta es solo “hello\n”.

    fmt.Fprintf(w, "hello\n")
}
func headers(w http.ResponseWriter, req *http.Request) {

Este manejador hace algo un poco más sofisticado al leer todos los encabezados de la solicitud HTTP y hacer eco de los mismos en el cuerpo de la respuesta.

    for name, headers := range req.Header {
        for _, h := range headers {
            fmt.Fprintf(w, "%v: %v\n", name, h)
        }
    }
}
func main() {

Registramos nuestros manejadores en rutas del servidor usando la función de conveniencia http.HandleFunc. Configura el enrutador predeterminado en el paquete net/http y toma una función como argumento.

    http.HandleFunc("/hello", hello)
    http.HandleFunc("/headers", headers)

Finalmente, llamamos a ListenAndServe con el puerto y un manejador. nil le indica que use el enrutador predeterminado que acabamos de configurar.

    http.ListenAndServe(":8090", nil)
}

Ejecuta el servidor en segundo plano.

$ go run http-servers.go &

Accede a la ruta /hello.

$ curl localhost:8090/hello
hello

Siguiente ejemplo: Context.