Skip to content

NingZeStudio/ysmmc

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

Use Gin on EdgeOne Pages with middleware, JSON binding, route groups, and RESTful API design.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors