Creating a simple HTTP server
As a programmer, if you have to create a simple HTTP server then you can easily write it using Go's net/http
package, which we will be covering in this recipe.
How to do it…
In this recipe, we are going to create a simple HTTP server that will render Hello World!
when we browse http://localhost:8080
or execute curl
http://localhost:8080
from the command line. Perform the following steps:
- Create
http-server.go
and copy the following content:
package main import ( "fmt" "log" "net/http" ) const ( CONN_HOST = "localhost" CONN_PORT = "8080" ) func helloWorld(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World!") } func main() { http.HandleFunc("/", helloWorld) err := http.ListenAndServe(CONN_HOST+":"+CONN_PORT, nil) if err != nil { log.Fatal("error starting http server : ", err) return } }
- Run the program with the following command:
$ go run http-server.go
How it works…
Once we run the program, an HTTP server will start locally listening on port 8080
. Opening http://localhost:8080
in a browser will display Hello World!
from the server, as shown in the following screenshot:

Hello World!
Let’s understand what each line in the program means:
package main
: This defines the package name of the program.import ( "fmt" "log" "net/http" )
: This is a preprocessor command that tells the Go compiler to include all files fromfmt
,log
, and thenet/http
package.
const ( CONN_HOST = "localhost" CONN_PORT = "8080" )
: We declare constants in the Go program using theconst
keyword. Here we declared two constants—one isCONN_HOST
with localhost as a value and another one isCONN_PORT
with8080
as a value.func helloWorld(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World!") }
: This is a Go function that takesResponseWriter
andRequest
as an input and writesHello World!
on an HTTP response stream.
Next, we declared the main()
method from where the program execution begins, as this method does a lot of things. Let’s understand it line by line:
http.HandleFunc("/", helloWorld)
: Here, we are registering thehelloWorld
function with the/
URL pattern usingHandleFunc
of thenet/http
package, which meanshelloWorld
gets executed, passing(http.ResponseWriter
,*http.Request)
as a parameter to it whenever we access the HTTP URL with pattern/
.err := http.ListenAndServe(CONN_HOST+":"+CONN_PORT, nil)
: Here, we are callinghttp.ListenAndServe
to serve HTTP requests that handle each incoming connection in a separate Goroutine.ListenAndServe
accepts two parameters—server address and handler. Here, we are passing the server address aslocalhost:8080
and handler asnil
, which means we are asking the server to useDefaultServeMux
as a handler.if err != nil { log.Fatal("error starting http server : ", err) return}
: Here, we check whether there is a problem starting the server. If there is, then log the error and exit with a status code of1
.