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)
}
Run the server in the background.
Access the /hello route.
$ go run http-servers.go &
$ curl localhost:8090/hello
hello
Source | License