A Simple Web Server

This lesson explains how to design a web server that provides services over the web.

We'll cover the following

Simple web server

HTTP is a higher-level protocol than TCP, and it describes how a web server communicates with client-browsers. Specifically for that purpose, Go has net/http package, which we will now explore.

We will start with some really simple concepts. First, let’s write a Hello world! web server. We import http, and our web server is started with the function http.ListenAndServe("0.0.0.0:3000", nil), which returns nil if everything is OK or an error otherwise (0.0.0.0 can be omitted from the address, 3000 is the chosen port number).

A web-address is represented by the type http.URL, which has a Path field that contains the URL as a string. Client-requests are described by the type http.Request, which has a URL field.

If the request req is a POST of an Html-form, and var1 is the name of an Html input-field on that form, then the value entered by the user can be captured in Go-code with: req.FormValue("var1"). This also works when var1 is a parameter given via the url: https://1dkne4jl5mmmm.educative.run/?var1=value (in your case URL will be different). An alternative is to first call request.ParseForm(), and the value can then be retrieved as the 1st return parameter of request.Form["var1"], like in:

var1, found := request.Form["var1"]

Remark: If you’re running it locally, http://localhost:nnnn/?var1=value will work.

The 2nd parameter found is then true. If var1 was not on the form, found becomes false. The Form field is in fact of type map[string][]string. The web server sends an http.Response, its output is sent on an http.ResponseWriter object. This object assembles the HTTP server’s response; by writing to it, we send data to the HTTP client. Now we still have to program what the web server must do, how it handles a request. This is done through the function http.HandleFunc. In this example, it says that if the root “/” is requested (or any other address on that server) the function HelloServer is called. This function is of the type http.HandlerFunc, and they are most often named Prefhandler with some prefix Pref. The http.HandleFunc registers a handler function (here HelloServer) for incoming requests on /. The / can be replaced by more specific URL’s like /create, /edit, and so on; for each specific URL, you can then define its corresponding handler-function.

This function has as 2nd parameter the request req. Its first parameter is the ResponseWriter, to which it writes a string composed of Hello and r.URL.Path[1:]. The trailing [1:] means create a sub-slice of Path from the 1st character to the end. It drops the leading / from the pathname. This writing is done with the function fmt.Fprintf(); another possibility is io.WriteString(w, "hello, world!\n")

The 1st parameter is a requested path and the 2nd parameter is a reference to a function to call when the path is requested.

Get hands-on with 1200+ tech skills courses.