Writing a basic HTTP server is easy using the
net/http package.
|
package main
|
|
import (
"fmt"
"net/http"
)
|
A fundamental concept in net/http servers is
handlers. A handler is an object implementing the
http.Handler interface. A common way to write
a handler is by using the http.HandlerFunc adapter
on functions with the appropriate signature.
|
func hello(w http.ResponseWriter, req *http.Request) {
|
Functions serving as handlers take a
http.ResponseWriter and a http.Request as
arguments. The response writer is used to fill in the
HTTP response. Here our simple response is just
“hello\n”.
|
fmt.Fprintf(w, "hello\n")
}
|
|
func headers(w http.ResponseWriter, req *http.Request) {
|
This handler does something a little more
sophisticated by reading all the HTTP request
headers and echoing them into the response body.
|
for name, headers := range req.Header {
for _, h := range headers {
fmt.Fprintf(w, "%v: %v\n", name, h)
}
}
}
|
|
func main() {
|
We register our handlers on server routes using the
http.HandleFunc convenience function. It sets up
the default router in the net/http package and
takes a function as an argument.
|
http.HandleFunc("/hello", hello)
http.HandleFunc("/headers", headers)
|
Finally, we call the ListenAndServe with the port
and a handler. nil tells it to use the default
router we’ve just set up.
|
http.ListenAndServe(":8090", nil)
}
|