Use Gin Web Framework to build your server

Use Gin Web Framework to build your server


3 min read

Let's build a simple web service using the Go programming language and the Gin web framework. We will define a basic web server that listens for incoming HTTP requests and responds with JSON data. The application would have a modular structure with separate files for the main application logic (main.go), route handling (web/router.go), and a specific route handler (web/assignments.go).

โ”œโ”€โ”€ go.mod
โ”œโ”€โ”€ go.sum
โ”œโ”€โ”€ main.go
โ””โ”€โ”€ web
    โ”œโ”€โ”€ assignments.go
    โ””โ”€โ”€ router.go

2 directories, 5 files
To create this structure in your terminal, utilize the 'tree' package. If you're on a Mac, employ the command 'brew install tree' and execute the 'tree' command. This will generate the desired output structure.


Create a folder learn-Gin and inside it make an empty file main.go. After that run the command go mod init learn-gin This will initialize a new Go module.

We also need to install Gin Web Framework, use the below command to get it from GitHub.

$ go get -u



package main

import (


func main() {
    r := web.Router()
  • This is the entry point of the application.

  • It imports the web package, which contains the routing logic.

  • In the main function, it initializes a router using the web.Router() function.

  • The r.Run() function starts the HTTP server and begins listening for incoming requests.

  • If an error occurs while starting the server, the application will log the error using log.Fatal().


package web

import (

type Assignments struct{}

func (a *Assignments) Index(c *gin.Context) {
    c.JSON(200, gin.H{
        "assignments": []string{},
  • This file defines a struct named Assignments.

  • The Assignments struct does not have any fields, but it has a method named Index associated with it.

  • The Index method is a route handler function that accepts a Gin context (c *gin.Context) as a parameter.

  • When an HTTP GET request is made to the /assignments endpoint, the Index function responds with a JSON object containing an empty array under the "assignments" key.


package web

import (

func Router() *gin.Engine {
    r := gin.Default()
    asgns := Assignments{}
    r.GET("/assignments", asgns.Index)
    return r
  • This file defines a function named Router that creates and configures a Gin router.

  • Inside the Router function, a new Gin router is created using gin.Default(). This sets up a basic router with default middleware, including logging and recovery.

  • An instance of the Assignments struct is created.

  • The /assignments endpoint is associated with the Index method of the Assignments struct, so when a GET request is made to this endpoint, the Index function is called to handle the request.

  • The function returns the configured router.

When you run the application, it starts an HTTP server that listens on a port (default is 8080), and when you access the /assignments endpoint, it responds with a JSON object containing an empty array.

Thanks for reading

If you're interested in delving deeper into topics like DSA, Blockchain, and Backend, make sure to follow me on Twitter (@jyotirmoydotdev) and subscribe to my newsletter for the latest blog posts.

Did you find this article valuable?

Support Jyotirmoy Barman by becoming a sponsor. Any amount is appreciated!