Friday, 3 January 2014

Creating a simple web server in Golang

No modern programming language would be complete without the ability to interact over the internet. Go has this in spades, and since there's nothing more satisfying than getting a web page up and running, we are going to code up a simple web server in Go:
package main

import ("fmt"

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello Web")

    http.ListenAndServe(":8080", nil)
Save this code as "server.go" and then run it by opening a command prompt and typing:
go run server.go
You command prompt will pause. Open a browser and enter the location as:
Your browser should return a page that says "Hello Web". Congratulations, you've just written your first web server in Golang.

Importing multiple packages

One of the new things we've done in our simple server is to import a second package. The net/http package allows us to work with the http protocol and listen for requests and serve responses. Importing multiple packages is pretty simple. There are various ways to do so, but the syntax above works fine - include your packages, one per line and surround the entire block of imports with parentheses.

Passing functions as arguments

The net/http package allows us to capture requests and route them with the HandleFunc - this function takes two parameters - the first, the url to handle and the second, a function which will be called when we hit the server on the specified url. This takes advantage of Go's first class functions which we explored a little before.


The http.ListenAndServe function tells go that to "listen" on a particular port - we've specified ":8080", hence our url becomes "http://localhost:8080". Unlike our previous snippets of code, which exited once they had finished executing, our web server will run until we specifically interrupt it (or it hits a nasty error). To exit our program, pull up the command prompt where you typed "go run server.go" and hit Ctrl-C.

No comments:

Post a Comment