A full-stack demo application built with Next.js + Tailwind CSS frontend and Go Echo backend, showcasing how to deploy Go Cloud Functions using the Echo framework on EdgeOne Pages with RESTful API routing.
- Echo Framework Integration: High-performance, minimalist Go web framework with custom middleware 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 Todo CRUD operations with structured route groups (
/api/todos) - TypeScript Support: Complete type definitions and type safety on the 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
- 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
- Go 1.21 - Cloud Functions runtime
- Echo v4 - High-performance, minimalist Go web framework
go-echo/
βββ cloud-functions/ # Go Cloud Functions source
β βββ api.go # Echo 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
- Node.js 18+
- pnpm (recommended) or npm
- Go 1.21+ (for local development)
pnpm install
# or
npm installedgeone pages devVisit http://localhost:8088 to view the application.
edgeone pages buildAll API endpoints are defined in a single cloud-functions/api.go file using Echo's route groups:
| Method | Route | Description |
|---|---|---|
| GET | / |
Welcome message with route list |
| GET | /health |
Health check (includes Go runtime info) |
| GET | /api/todos |
List all todos |
| POST | /api/todos |
Create a new todo |
| GET | /api/todos/:id |
Get todo by ID |
| PATCH | /api/todos/:id/toggle |
Toggle todo completion |
| DELETE | /api/todos/:id |
Delete a todo |
- 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
The Go backend uses Echo's standard patterns β route groups, context binding, and custom middleware:
package main
import (
"github.com/labstack/echo/v4"
"net/http"
)
func main() {
e := echo.New()
e.GET("/health", func(c echo.Context) error {
return c.JSON(http.StatusOK, echo.Map{
"status": "ok",
"framework": "echo",
})
})
api := e.Group("/api")
api.GET("/todos", listTodos)
api.POST("/todos", createTodo)
api.GET("/todos/:id", getTodo)
api.PATCH("/todos/:id/toggle", toggleTodo)
api.DELETE("/todos/:id", deleteTodo)
e.Start(":9000")
}type Todo struct {
ID int `json:"id"`
Title string `json:"title"`
Completed bool `json:"completed"`
CreatedAt time.Time `json:"createdAt"`
}The project uses Tailwind CSS 4 with custom color variables:
:root {
--primary: #1c66e5; /* Primary color */
--background: #000000; /* Background color */
--foreground: #ffffff; /* Foreground color */
}Uses class-variance-authority to manage component style variants with multiple preset styles.
- EdgeOne Pages Official Docs: https://pages.edgeone.ai/document/go
- Echo Framework: https://echo.labstack.com/docs
- Next.js Documentation: https://nextjs.org/docs
- Tailwind CSS Documentation: https://tailwindcss.com/docs
- Push code to GitHub repository
- Create new project in EdgeOne Pages console
- Select GitHub repository as source
- Configure build command:
edgeone pages build - Deploy project
Create cloud-functions/api.go in project root with your Echo application:
package main
import (
"github.com/labstack/echo/v4"
"net/http"
)
func main() {
e := echo.New()
e.GET("/hello", func(c echo.Context) error {
return c.JSON(http.StatusOK, echo.Map{
"message": "Hello from Go Echo on EdgeOne Pages!",
})
})
e.Start(":9000")
}This project is licensed under the MIT License - see the LICENSE file for details.