Golang Rest API

Gin

Installation on Golang

We will use gvm to install go for the current user. Note that we need to use go1.4 to compile go1.5 because go1.5 use go itself as compiler, therefore it need to have go installed.

Note that gvm is mainly for development use, IMHO using tar install or docker is a better way for production server.

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
gvm install go1.4
gvm use go1.4
gvm install go1.6
gvm use go1.6 --default

Gin-Gonic/Gin

Gin is a web framework written in Go (Golang). It features a martini-like API with much better performance, up to 40 times faster thanks to httprouter. If you need performance and good productivity, you will love Gin.

go get github.com/gin-gonic/gin
#~/golang/server.go
package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    r.Run() // listen and server on 0.0.0.0:8080
}

and execute it with go run server.go, access localhost:8080/ping and you should be able to see {"message":"pong"}

Live Reloading with codegangsta/gin

However for development, it is important to have compile on files changed function. There is a package there for go. Note that do not start any app on proxy port that is used by gin (default 3000) and the application port.

Running below code will autostart the go app.

go get github.com/codegangsta/gin
cd ~/golang/
gin -i -a 8080

now change the code without terminating gin

#~/golang/server.go
package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong pong",
        })
    })
    r.Run() // listen and server on 0.0.0.0:8080
}

access to localhost:8080/ping and you should be able to see {"message":"pong pong"}

This is It

With this, we have successfully setup a simple golang rest api server. Golang is a promising solution to give both near C performance + dynamic language development speed + goroutine.

Written on February 20, 2016