找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1108

积分

0

好友

140

主题
发表于 昨天 09:22 | 查看: 2| 回复: 0

作为一名Go开发者,你是否常常面临以下挑战?

  • 每次启动新项目,都需要重复搭建基础架构,耗时费力。
  • 业务逻辑代码与基础设施代码混杂在一起,维护成本越来越高。
  • 团队成员的代码风格各异,代码审查(Code Review)效率低下。
  • 渴望建立统一的开发规范,却不知从何入手。
  • 随着项目规模扩大,模块间的解耦与协作变得异常困难。

如果你正被这些问题困扰,那么不妨了解一下 jzero,一个旨在提升Go开发体验的开源工具。

什么是 jzero?

jzero 是一个基于 go-zero 框架开发的增强型开发工具集,它通过以下两种核心方式提升开发效率:

  • 🏗️ 模板生成基础框架代码:根据描述文件(如 .api.proto、SQL)自动生成对应的框架代码。
  • 🤖 Agent Skills 生成业务代码:内置 jzero-skills,引导 AI(如 Claude)生成符合最佳实践的业务逻辑代码。

其核心设计理念与价值包括:

  • 开发体验优先:提供一站式生产可用解决方案,支持一键初始化 API、RPC、Gateway 项目。
  • AI 赋能:通过预设的 Skills,让 AI 助手生成高质量的业务代码。
  • 模板驱动:默认生成的代码即代表最佳实践,并支持自定义远程模板,打造企业专属底座。
  • 插件化架构:功能模块分层设计,支持插件化,使团队协作更顺畅。
  • 内置开发组件:包含缓存、数据库迁移、配置中心、条件查询等常用工具。
  • 生态兼容:完全兼容 go-zero 生态,旨在解决其痛点并扩展新功能。
  • 接口灵活:不绑定特定数据库、缓存或配置中心,可按需自由选择。

项目地址:

基础框架代码生成

jzero 能够基于可描述文件,自动生成生产就绪的基础框架代码。

从 .api 文件生成 API 框架代码

给定一个描述 API 的 .api 文件:

info (
    go_package: “user” // 定义生成的 type 文件夹位置
)

type User {
    id int `json:“id”`
    username string `json:“username”`
}

type PageRequest {
    page int `form:“page”`
    size int `form:“size”`
}

type PageResponse {
    total uint64 `json:“total”`
    list  []User `json:“list”`
}

@server (
    prefix: /api/user        // 路由前缀
    group: user              // 生成的 handler/logic 文件夹位置
    jwt: JwtAuth             // 启用 JWT 认证
    middleware: AuthX        // 中间件
    compact_handler: true    // 合并该 group 的 handler 到同一个文件
)
service userservice {
    @doc “用户分页”
    @handler Page
    get /page (PageRequest) returns (PageResponse)
}

执行生成命令后,jzero 会自动创建 Handler、Logic、Types、路由注册以及中间件等全套代码。

特性说明

  • go_package: 用于定义 types 结构体生成的文件夹位置,避免单个 types.go 文件过于庞大。
  • compact_handler: true: 将同一分组(group)下的所有 handler 合并到同一个文件中,有效减少项目中的文件数量。

从 .proto 文件生成 RPC 框架代码

对于一个定义服务的 .proto 文件:

syntax = “proto3”;

package user;
option go_package = “./types/user”;

// 引入 jzero 扩展
import “jzero/api/http.proto”;
import “jzero/api/zrpc.proto”;

import “google/api/annotations.proto”;

// 引入公共 proto
import “common/common.proto”;

// 引入验证规则
import “buf/validate/validate.proto”;

message GetUserRequest {
  int64 id = 1;
}

message CreateUserRequest {
  string username = 1 [
    (buf.validate.field).string = {
      min_len: 3,
      max_len: 20,
      pattern: “^[a-zA-Z0-9_]+$”
    }
  ];
  string email = 2 [
    (buf.validate.field).string.email = true,
    (buf.validate.field).string.max_len = 254,
    (buf.validate.field).string.min_len = 3
  ];
  string password = 3 [
    (buf.validate.field).cel = {
      id: “password.length”
      message: “password must contain at least 8 characters”
      expression: “this.size() >= 8”
    }
  ];
}

message CreateUserResponse {
  int64 id = 1;
  string username = 2;
}

message GetUserResponse {
  int64 id = 1;
  string username = 2;
}

service UserService {
  // 为整个 service 添加 HTTP 中间件
  option (jzero.api.http_group) = {
    middleware: “auth,log”,
  };

  // 为整个 service 添加 RPC 中间件
  option (jzero.api.zrpc_group) = {
    middleware: “trace”,
  };

  rpc CreateUser(CreateUserRequest) returns (CreateUserResponse) {
    option (google.api.http) = {
      post: “/api/v1/user/create”,
      body: “*”
    };
  }

  rpc GetUser(GetUserRequest) returns (GetUserResponse) {
    option (google.api.http) = {
      get: “/api/v1/user/{id}”,
    };
  };
}

生成命令会输出 RPC 服务端与客户端代码、HTTP Gateway 以及配置的中间件。

特性说明

  • 支持多 Proto 文件:可在项目中定义多个 .proto 文件(例如 user.proto, order.proto)。
  • 支持引入公共 Proto:方便管理公共的消息定义。
  • 一键生成 RPC 客户端:生成独立的客户端代码,与服务端解耦,便于调用。
  • 内置字段验证:基于 buf.validate 实现自动参数校验,支持强大的 CEL(Common Expression Language)表达式。
  • 灵活中间件配置:支持为整个 Service 或单个 RPC Method 分别配置 HTTP 及 RPC 中间件。

从 SQL/数据库生成 Model 代码

无论是本地的 SQL 文件还是远程数据库连接,jzero 都能生成对应的数据模型代码。

CREATE TABLE `user` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

基于上述 SQL,jzero 将生成包含 CRUD 操作的 Model 层代码,并支持复杂的链式查询。

特性说明

  • 多种数据源:支持 SQL 文件或直接连接远程数据库来生成代码。
  • 自动生成 CRUD 接口:为基础的表操作自动生成代码。
  • 复杂查询支持:提供链式查询方法,以应对复杂的业务查询场景。
  • 一套代码,多数据库适配:生成的模型代码兼容 MySQL、PostgreSQL、SQLite 等多种数据库,切换底层存储时无需重新生成代码。

灵活的生成策略与配置

jzero 提供了高度灵活的生成策略,以适应不同开发阶段的需求,显著提升大型项目的代码生成效率。

# 仅生成与 Git 改动相关的文件对应的代码
jzero gen --git-change

# 指定特定描述文件进行生成
jzero gen --desc desc/api/user.api

在配置方面,jzero 支持多种方式的自由组合,告别复杂的命令行指令:

  • 项目配置文件 (.jzero.yaml)
  • 命令行参数
  • 环境变量
# 使用默认配置文件 .jzero.yaml 生成
jzero gen

# 指定其他配置文件生成
jzero gen --config .jzero.dev.yaml

这意味着你可以轻松为本地开发、测试、生产等不同环境准备独立的配置,实现一键切换。

Hooks 配置:jzero 还支持在代码生成前后执行自定义脚本,实现流程自动化。

# .jzero.yaml

# 全局 hooks
hooks:
  before:
    - echo “执行 jzero 指令前执行”
  after:
    - echo “执行 jzero 指令后执行”

# gen 指令专有配置
gen:
  hooks:
    before:
      - echo “执行生成代码前执行”
      - go mod tidy
    after:
      - echo “执行生成代码后执行”

通过 Agent Skills 生成业务代码

jzero 集成了 jzero-skills,能够引导 AI 工具自动生成符合项目规范和最佳实践的业务代码。

# 初始化,将 AI Skills 配置输出到 Claude 的默认技能目录(通常为 ~/.claude/skills)
jzero skills init

# 将 Skills 配置输出到当前项目的指定目录
jzero skills init --output .claude/skills

# 随后,在 Claude 等 AI 助手中用自然语言描述需求,建议以“jzero-skills”开头引导

AI 能协助完成哪些工作?

1. REST API 开发

  • 自动编写符合规范的 .api 描述文件(正确设置 go_package, group, compact_handler 等)。
  • 自动执行 jzero gen --desc desc/api/xxx.api 命令生成框架代码。
  • 自动实现 Logic 层的业务逻辑,严格遵循 Handler → Logic → Model 三层架构。

2. 数据库操作

  • 自动创建 SQL 迁移文件(xx.up.sqlxx.down.sql)。
  • 自动执行数据库迁移命令(jzero migrate up)。
  • 自动根据 SQL 文件生成 Model 代码(jzero gen --desc desc/sql/xxx.sql)。

3. RPC 服务开发

  • 自动编写 .proto 文件来定义服务接口。
  • 自动生成 RPC 服务端和客户端代码。
  • 自动实现服务端的业务逻辑,同样遵循清晰的分层架构。

插件化架构

jzero 支持插件化开发,允许将功能模块作为独立的插件进行开发和加载,这对于大型项目和团队协作尤其有益。

# 1. 创建一个名为 helloworld 的 API 服务项目
jzero new helloword --frame api

cd helloworld

# 2. 向项目中添加一个独立的 API 插件
jzero new plugin_name --frame api --serverless

# 3. 添加一个“mono”类型的 API 插件(与主项目共用同一个 Go Module)
jzero new plugin_name_mono --frame api --serverless --mono

# 4. 编译并加载所有已创建的插件
jzero serverless build

# 5. 卸载所有插件
jzero serverless delete

# 6. 卸载指定的某个插件
jzero serverless delete --plugin plugin_name

插件化架构的优势

  • 📦 功能解耦:各功能模块可独立开发、测试和部署。
  • 👥 高效协作:不同团队可以专注于自己负责的插件,减少冲突。
  • 🔄 按需加载:应用程序可以根据运行时需求动态加载或卸载插件,组装灵活。

快速体验:5分钟上手

只需几步,你就能快速体验 jzero 带来的便捷。

# 1. 安装 jzero
go install github.com/jzero-io/jzero/cmd/jzero@latest

# 2. 一键检查本地开发环境是否就绪
jzero check

# 3. 创建一个新项目
# 创建 API 项目
jzero new helloworld --frame api
# 创建 RPC 项目
jzero new helloworld --frame rpc
# 创建 Gateway 项目
jzero new helloworld --frame gateway

cd helloworld

# 4. 下载项目依赖
go mod tidy

# 5. 运行服务
go run main.go server

# 服务启动后,可通过内置的 Swagger UI 查看和调试 API
# 访问:http://localhost:8001/swagger

相关生态项目

jzero-intellij IDE 插件

如果你使用的是 GoLandIntelliJ IDEA,那么 jzero-intellij 插件能极大提升你的开发体验。

核心功能

  • 在 IDE 内一键创建 .api.proto.sql 等描述文件。
  • .api 文件提供语法智能高亮。
  • 支持在描述文件(api/proto)与生成的 Logic 文件之间快速跳转。
  • 在描述文件的行首和 .jzero.yaml 配置文件中添加便捷的“执行按钮”,直接生成代码。

下载地址https://github.com/jzero-io/jzero-intellij/releases

jzero-admin 后台管理系统

这是一个基于 jzero 构建的、开箱即用的后台管理系统,内置了完整的 RBAC(基于角色的访问控制)权限管理模块。

核心特性

  • 完整的权限管理系统(用户、菜单、角色管理)。
  • 支持 MySQL、PostgreSQL、SQLite 多种数据库。
  • 后端采用插件化架构,易于扩展。
  • 支持国际化。

jzero-admin 用户管理界面

jzero-admin 菜单管理界面

jzero-admin 角色管理界面

在线演示

GitHubhttps://github.com/jzero-io/jzero-admin

作为一个致力于提升 Go 开发效率的开源项目,jzero 通过代码生成、AI 集成和插件化等特性,为构建微服务提供了新的思路。其详细的技术文档和丰富的生态工具,值得 Go 开发者深入探索和实践。如果你对如何优化开发流程感兴趣,欢迎在 云栈社区 交流更多实战经验。




上一篇:半画幅相机2026年选购指南:为何它比全画幅更值得推荐?
下一篇:Docker容器时区永久生效实战:三种方案从应急到规范,重启不失效
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-9 00:52 , Processed in 0.320622 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表