Go+Vue生产力工具:LWDK框架栈集成Vite技术解析

Go+Vue生产力工具:LWDK框架栈集成Vite技术解析 大家好!👋 我叫 Túlio,今年 29 岁,来自巴西。我正在开发一个名为 LWDK 的 Web 开发技术栈,它使用 Go 语言构建,旨在将自动化概念——类似于 Artisan 为 Laravel 所做的——引入 Go 生态系统。

该技术栈可通过 CLI 安装,完全用 Go 编写,旨在简化和加速使用 Vue(通过 Vite)和 Go 进行全栈 Web 开发的过程。

我已经创建了一个网站,您可以在那里下载该工具并查看其实际效果:https://lwdk.site13.com.br。 网站包含一个用于其他语言的自动翻译小部件,我目前正在致力于工具的全面国际化。

虽然它 目前 还不是开源的(因为我仍在完善其核心部分),但我计划在未来将其开源。欢迎任何形式的帮助,如果您对这个想法感兴趣或想参与这个项目,请随时联系我!

主要特性:

  • 一个命令 即可创建完整的项目结构(前端 + 后端)
  • 前端和后端都支持 实时重载
  • 通过 [create] 命令实现 关注点分离 和清晰的结构
  • [make:route] 在 Go 中自动生成后端路由
  • [db:sync] 同步并创建数据库结构,带有可选的预设(非常适合调试)
  • 更多功能即将推出!

📦 下载并了解更多信息:https://lwdk.site13.com.br

请告诉我您的想法,或者您是否愿意参与贡献。谢谢!🙌


1 回复

LWDK框架栈将Go与Vue/Vite集成,确实能显著提升全栈开发效率。以下是技术实现的核心解析:

1. 项目结构自动化

// 典型的LWDK项目结构生成
project/
├── backend/
│   ├── cmd/
│   ├── internal/
│   │   ├── routes/     // 自动生成的路由
│   │   ├── models/     // 数据库模型
│   │   └── handlers/   // 请求处理器
│   └── go.mod
└── frontend/
    ├── src/
    ├── vite.config.js
    └── package.json

2. 实时重载实现

// backend/dev_server.go - Go后端热重载
package main

import (
    "github.com/fsnotify/fsnotify"
    "log"
    "os/exec"
)

func startDevServer() {
    watcher, _ := fsnotify.NewWatcher()
    defer watcher.Close()
    
    go func() {
        for {
            select {
            case event := <-watcher.Events:
                if event.Op&fsnotify.Write == fsnotify.Write {
                    log.Println("File changed:", event.Name)
                    restartServer()
                }
            }
        }
    }()
    
    watcher.Add("./internal")
    // 保持服务器运行
}
// frontend/vite.config.js - Vite前端热重载
export default {
  server: {
    port: 3000,
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true
      }
    }
  },
  build: {
    outDir: '../backend/static',
    emptyOutDir: true
  }
}

3. 路由自动生成

// 通过CLI命令自动生成路由
// make:route users --method=GET,POST --auth=true

// internal/routes/users.go
package routes

import (
    "net/http"
    "github.com/lwdk/internal/handlers"
    "github.com/lwdk/internal/middleware"
)

func RegisterUserRoutes(mux *http.ServeMux) {
    // 自动生成的GET路由
    mux.HandleFunc("GET /api/users", 
        middleware.Auth(handlers.GetUsers))
    
    // 自动生成的POST路由  
    mux.HandleFunc("POST /api/users",
        middleware.Auth(handlers.CreateUser))
    
    // 自动生成的CRUD路由
    mux.HandleFunc("GET /api/users/{id}", handlers.GetUser)
    mux.HandleFunc("PUT /api/users/{id}", handlers.UpdateUser)
    mux.HandleFunc("DELETE /api/users/{id}", handlers.DeleteUser)
}

4. 数据库同步功能

// db:sync 命令实现示例
package main

import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
    "github.com/lwdk/internal/models"
)

func DBSync(preset string) error {
    db, err := sql.Open("postgres", "connection_string")
    if err != nil {
        return err
    }
    defer db.Close()
    
    // 根据预设同步表结构
    switch preset {
    case "debug":
        syncDebugSchema(db)
    case "production":
        syncProductionSchema(db)
    default:
        syncDefaultSchema(db)
    }
    
    return nil
}

func syncDefaultSchema(db *sql.DB) {
    // 自动创建users表
    query := `
    CREATE TABLE IF NOT EXISTS users (
        id SERIAL PRIMARY KEY,
        name VARCHAR(100),
        email VARCHAR(100) UNIQUE,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )`
    
    _, err := db.Exec(query)
    if err != nil {
        fmt.Printf("Error creating table: %v\n", err)
    }
}

5. Go与Vite集成示例

// main.go - 集成Vite构建的前端
package main

import (
    "embed"
    "io/fs"
    "log"
    "net/http"
    "os"
)

//go:embed frontend/dist/*
var frontend embed.FS

func main() {
    // 开发环境:代理到Vite开发服务器
    if os.Getenv("APP_ENV") == "development" {
        setupDevProxy()
        return
    }
    
    // 生产环境:嵌入静态文件
    distFS, _ := fs.Sub(frontend, "frontend/dist")
    http.Handle("/", http.FileServer(http.FS(distFS)))
    
    // API路由
    http.HandleFunc("/api/", apiHandler)
    
    log.Println("Server running on :8080")
    http.ListenAndServe(":8080", nil)
}

func setupDevProxy() {
    // 开发模式下,前端请求代理到Vite服务器(5173端口)
    // 后端API直接处理
    go startBackendServer()
    
    // 这里可以启动一个反向代理服务器
    // 或者让Vite代理后端API请求
}

6. CLI命令实现框架

// cmd/cli/main.go
package main

import (
    "flag"
    "fmt"
    "os"
)

func main() {
    if len(os.Args) < 2 {
        fmt.Println("Available commands:")
        fmt.Println("  create [project-name]")
        fmt.Println("  make:route [name]")
        fmt.Println("  db:sync [preset]")
        return
    }
    
    switch os.Args[1] {
    case "create":
        createProject(os.Args[2])
    case "make:route":
        makeRoute(os.Args[2])
    case "db:sync":
        dbSync(os.Args[2])
    }
}

func createProject(name string) {
    // 创建标准项目结构
    os.MkdirAll(name+"/backend/internal/routes", 0755)
    os.MkdirAll(name+"/frontend/src", 0755)
    
    // 生成go.mod文件
    // 生成package.json文件
    // 生成基础配置文件
}

LWDK的技术栈选择很合理:Go提供高性能后端,Vue3+Vite提供现代前端体验。实时重载通过fsnotify监控文件变化,Vite的HMR处理前端更新,Go后端通过进程重启或热编译实现重载。数据库同步功能通过解析结构体标签或配置文件自动生成SQL语句,这能大幅减少重复的CRUD代码编写工作。

回到顶部