Skip to content

TencentEdgeOne/go-gin-template

Repository files navigation

Go Cloud Functions on EdgeOne Pages - Gin Framework

A full-stack demo application built with Next.js + Tailwind CSS frontend and Go Gin backend, showcasing how to deploy Go Cloud Functions using the Gin framework on EdgeOne Pages with RESTful API routing.

πŸš€ Features

  • Gin Framework Integration: Full-featured Go web framework with middleware, JSON binding, and route groups
  • Modern UI Design: Dark theme with #1c66e5 accent color, responsive layout with interactive elements
  • Interactive API Testing: Built-in API endpoint panel β€” click "Call" to test each REST endpoint in real-time
  • RESTful API Design: Complete CRUD operations with structured route groups (/v1/users, /v1/posts)
  • TypeScript Support: Complete type definitions and type safety on the frontend

πŸ› οΈ Tech Stack

Frontend

  • Next.js 15 - React full-stack framework (with Turbopack)
  • React 19 - User interface library
  • TypeScript - Type-safe JavaScript
  • Tailwind CSS 4 - Utility-first CSS framework

UI Components

  • shadcn/ui - High-quality React components
  • Lucide React - Beautiful icon library
  • class-variance-authority - Component style variant management
  • clsx & tailwind-merge - CSS class name merging utilities

Backend

  • Go 1.21 - Cloud Functions runtime
  • Gin v1.10 - High-performance HTTP web framework for Go

πŸ“ Project Structure

go-gin-template/
β”œβ”€β”€ cloud-functions/                # Go Cloud Functions source
β”‚   β”œβ”€β”€ api.go                     # Gin app with all REST API routes
β”‚   β”œβ”€β”€ go.mod                     # Go module definition
β”‚   └── go.sum                     # Go dependency checksums
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/                       # Next.js App Router
β”‚   β”‚   β”œβ”€β”€ globals.css           # Global styles (dark theme)
β”‚   β”‚   β”œβ”€β”€ layout.tsx            # Root layout
β”‚   β”‚   └── page.tsx              # Main page (API testing UI)
β”‚   β”œβ”€β”€ components/               # React components
β”‚   β”‚   └── ui/                   # UI base components
β”‚   β”‚       β”œβ”€β”€ button.tsx        # Button component
β”‚   β”‚       └── card.tsx          # Card component
β”‚   └── lib/                      # Utility functions
β”‚       └── utils.ts              # Common utilities (cn helper)
β”œβ”€β”€ public/                        # Static assets
β”‚   β”œβ”€β”€ eo-logo-blue.svg          # EdgeOne logo (blue)
β”‚   └── eo-logo-white.svg         # EdgeOne logo (white)
β”œβ”€β”€ package.json                   # Project configuration
└── README.md                     # Project documentation

πŸš€ Quick Start

Requirements

  • Node.js 18+
  • pnpm (recommended) or npm
  • Go 1.21+ (for local development)

Install Dependencies

pnpm install
# or
npm install

Development Mode

edgeone pages dev

Visit http://localhost:8088 to view the application.

Build Production Version

edgeone pages build

🎯 Core Features

1. Gin REST API Routes

All API endpoints are defined in a single cloud-functions/api.go file using Gin's route groups:

Method Route Description
GET /api/v1/hello Welcome message
GET /api/v1/health Health check (includes Go runtime version)
GET /api/v1/users List all users
GET /api/v1/users/:id Get user by ID
POST /api/v1/users Create new user (JSON body binding)
GET /api/v1/posts List all posts
GET /api/v1/posts/:id Get post by ID

2. Interactive API Testing Panel

  • 7 pre-configured API endpoint cards with "Call" buttons
  • Real-time JSON response display with syntax highlighting
  • POST request support with pre-filled JSON body
  • Loading states and error handling

3. Gin Framework Convention

The Go backend uses Gin's standard patterns β€” route groups, JSON binding, and middleware:

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    r := gin.Default()

    v1 := r.Group("/v1")
    {
        v1.GET("/hello", func(c *gin.Context) {
            c.JSON(http.StatusOK, gin.H{
                "message": "Hello from Go Gin!",
            })
        })

        v1.GET("/users", getUsersHandler)
        v1.GET("/users/:id", getUserByIdHandler)
        v1.POST("/users", createUserHandler)
    }

    r.Run(":9000")
}

4. Data Models

type User struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email"`
}

type Post struct {
    ID    int    `json:"id"`
    Title string `json:"title"`
    Body  string `json:"body"`
}

πŸ”§ Configuration

Tailwind CSS Configuration

The project uses Tailwind CSS 4 with custom color variables:

:root {
  --primary: #1c66e5;        /* Primary color */
  --background: #000000;     /* Background color */
  --foreground: #ffffff;     /* Foreground color */
}

Component Styling

Uses class-variance-authority to manage component style variants with multiple preset styles.

πŸ“š Documentation

πŸš€ Deployment Guide

EdgeOne Pages Deployment

  1. Push code to GitHub repository
  2. Create new project in EdgeOne Pages console
  3. Select GitHub repository as source
  4. Configure build command: edgeone pages build
  5. Deploy project

Go Gin Cloud Function

Create cloud-functions/api.go in project root with your Gin application:

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    r := gin.Default()

    r.GET("/v1/hello", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "Hello from Go Gin on EdgeOne Pages!",
        })
    })

    r.Run(":9000")
}

Deploy

Deploy with EdgeOne Pages

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors