Skip to content

TencentEdgeOne/go-handler-template

Repository files navigation

Go Cloud Functions on EdgeOne Pages - Handler Mode

A function request demonstration website based on Next.js + Tailwind CSS, showcasing how to deploy Go Cloud Functions using Handler Mode on EdgeOne Pages with file-based routing.

πŸš€ Features

  • File-Based Routing: Go handler files map directly to API endpoints, just like Next.js file routing
  • Modern UI Design: Adopts black background with white text theme, using #1c66e5 as accent color
  • Real-time API Demo: Integrated Go backend with interactive API call testing for all route types
  • Multiple Route Patterns: Supports static, index, dynamic, nested dynamic, and catch-all routes
  • TypeScript Support: Complete type definitions and type safety

πŸ› οΈ Tech Stack

Frontend

  • Next.js 15 - React full-stack framework
  • 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
  • Handler Mode - File-based routing for Go functions on EdgeOne Pages

πŸ“ Project Structure

go-handler-template/
β”œβ”€β”€ cloud-functions/                # Go Cloud Functions source
β”‚   β”œβ”€β”€ hello.go                   # Static route β†’ GET /hello
β”‚   └── api/
β”‚       β”œβ”€β”€ posts/
β”‚       β”‚   └── index.go           # Index route β†’ GET /api/posts
β”‚       β”œβ”€β”€ users/
β”‚       β”‚   β”œβ”€β”€ [userId].go        # Dynamic param β†’ GET /api/users/:userId
β”‚       β”‚   └── [userId]/
β”‚       β”‚       └── posts/
β”‚       β”‚           └── [postId].go # Nested params β†’ GET /api/users/:userId/posts/:postId
β”‚       └── files/
β”‚           └── [[path]].go        # Catch-all β†’ GET /api/files/*path
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/                       # Next.js App Router
β”‚   β”‚   β”œβ”€β”€ globals.css           # Global styles
β”‚   β”‚   β”œβ”€β”€ layout.tsx            # Root layout
β”‚   β”‚   └── page.tsx              # Main page (API demo UI)
β”‚   β”œβ”€β”€ components/               # React components
β”‚   β”‚   └── ui/                   # UI base components
β”‚   β”‚       β”œβ”€β”€ button.tsx        # Button component
β”‚   β”‚       └── card.tsx          # Card component
β”‚   └── lib/                      # Utility functions
β”‚       └── utils.ts              # Common utilities
β”œβ”€β”€ public/                        # Static assets
β”œβ”€β”€ package.json                   # Project configuration
└── README.md                     # Project documentation

πŸš€ Quick Start

Requirements

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

Install Dependencies

npm install
# or
yarn install

Development Mode

edgeone pages dev

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

Build Production Version

edgeone pages build

🎯 Core Features

1. File-Based Go Routing

The cloud-functions/ directory maps directly to API routes:

File Route Pattern
hello.go GET /hello Static route
api/posts/index.go GET /api/posts Index route
api/users/[userId].go GET /api/users/:userId Dynamic parameter
api/users/[userId]/posts/[postId].go GET /api/users/:userId/posts/:postId Nested dynamic parameters
api/files/[[path]].go GET /api/files/*path Catch-all route

2. Interactive API Demo

  • Click "Call" to test each API endpoint in real-time
  • View JSON response with syntax highlighting
  • Expandable source file path display

3. Handler Convention

Each Go file exports a standard Handler function:

package handler

import (
    "encoding/json"
    "net/http"
)

func Handler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(map[string]interface{}{
        "message": "Hello from Go Cloud Functions!",
    })
}

πŸ”§ 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 Cloud Functions Configuration

Create cloud-functions/ folder in project root and add Go handler files:

// cloud-functions/hello.go
package handler

import (
    "encoding/json"
    "net/http"
)

func Handler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(map[string]string{
        "message": "Hello from Go!",
    })
}

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