Code Explainers

Gin code explainers

go
package theme
 
import (
	"fmt"

Per-tenant HTML templates with Gin's renderer

multi-tenancy concurrency html-templates
Advanced 8 steps
go
package middleware
 
import (
	"net/http"

A maintenance-mode gate in Gin

middleware atomic-flag concurrency
Intermediate 8 steps
go
func ServeVideo(c *gin.Context) {
	id := c.Param("id")
	video, err := videoRepo.FindByID(c.Request.Context(), id)
	if err != nil {

Streaming video files with Gin

http streaming range requests file serving
Intermediate 6 steps
go
package handler
 
type LineItem struct {
	SKU      string  `json:"sku" binding:"required,alphanum"`

Structured validation errors in Gin

validation json-binding error-handling
Intermediate 8 steps
go
package handlers
 
import (
	"net/http"

Query-string filtering in Gin with GORM

query-binding validation conditional-queries
Intermediate 8 steps
go
func ProxyDownload(c *gin.Context) {
	objectKey := c.Param("key")
	upstream := fmt.Sprintf("%s/files/%s", storageBaseURL, objectKey)
 

Streaming a proxied download in Gin

reverse-proxy streaming http-headers
Intermediate 8 steps
go
package handlers
 
import (
	"net/http"

Header-driven API versioning in Gin

api-versioning header-binding closures
Intermediate 6 steps
go
func ListArticles(db *gorm.DB) gin.HandlerFunc {
	return func(c *gin.Context) {
		page, err := strconv.Atoi(c.DefaultQuery("page", "1"))
		if err != nil || page < 1 {

Building a paginated list endpoint in Gin

pagination query-parameters input-validation
Intermediate 8 steps
go
package middleware
 
import (
	"bytes"

Building a response cache middleware in Gin

middleware caching concurrency
Intermediate 8 steps
go
package handlers
 
import (
	"net/http"

Validating query params with Gin binding tags

validation struct-tags pagination
Intermediate 8 steps
go
package server
 
import (
	"net/http"

Serving cached static assets in Gin

caching static-files middleware
Intermediate 7 steps
go
package middleware
 
import (
	"net/http"

Per-IP rate limiting middleware in Gin

rate-limiting token-bucket concurrency
Intermediate 7 steps
go
package middleware
 
import (
	"net/http"

Building a CORS middleware in Gin

cors middleware closures
Intermediate 9 steps
go
package middleware
 
import (
	"context"

How a request-timeout middleware works in Gin

middleware context goroutines
Advanced 6 steps
go
package main
 
import (
	"context"

Graceful shutdown for a Gin server in Go

graceful-shutdown signals goroutines
Intermediate 6 steps
go
package middleware
 
import (
	"bytes"

Capturing response bodies in Gin middleware

middleware response-capture struct-embedding
Intermediate 7 steps
go
func GetArticle(c *gin.Context) {
	id := c.Param("id")
 
	article, err := articleRepo.FindByID(c.Request.Context(), id)

Conditional GET with ETags in Gin

http-caching etag conditional-requests
Intermediate 7 steps
go
package middleware
 
import (
	"net/http"

How a www-to-apex redirect middleware works in Gin

middleware http-redirect closures
Intermediate 5 steps