# gox **Repository Path**: llyb120/gox ## Basic Information - **Project Name**: gox - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-01 - **Last Updated**: 2025-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GoX - Go语言Query()语法扩展 GoX 是一个Go语言扩展,使用新的 `Query()` 语法在Go代码中嵌入SQL代码块,完全兼容Go语法且支持IDE。 ## 🎯 新架构特性 - 🚀 **Query()函数语法** - 使用 `Query(\`...\`)` 代替 `sql {}`,完全兼容Go语法 - 💡 **IDE友好** - 不再有红色波浪线错误,支持语法高亮和自动完成 - 🔧 **双重表达式支持**: - `{expression}` - 文本插入(表名、字段名、SQL片段) - `#{expression}` - 参数化查询(防SQL注入) - 🔗 **嵌套支持** - 使用 `Query('...')` 单引号语法进行嵌套 - 📁 **`.gox.go` 文件** - 源文件使用单一后缀,生成 `.go` 文件 - 🛠️ **go generate 集成** - 使用标准的 `go generate` 工作流 ## 安装 ### 快速安装 ```bash go install github.com/yourusername/gox/cmd/goxgen@latest ``` ### 从源码构建 ```bash git clone https://github.com/yourusername/gox.git cd gox go build -o goxgen.exe cmd/goxgen/main.go ``` ## 基本语法 ### 1. 基础Query语法 ```go query := Query(`SELECT * FROM users WHERE active = 1`) ``` ### 2. 参数化查询 ```go userID := 123 status := "active" query := Query(` SELECT * FROM users WHERE id = #{userID} AND status = #{status} `) ``` ### 3. 文本插入 ```go tableName := "users" query := Query(`SELECT count(*) FROM {tableName}`) ``` ### 4. 条件逻辑 ```go includeDeleted := false query := Query(` SELECT * FROM users WHERE { if includeDeleted { return "1=1" } else { return "deleted_at IS NULL" } } `) ``` ### 5. 嵌套Query(简化语法✨) ```go role := "admin" query := Query(` SELECT * FROM users WHERE id IN ( { Q('SELECT user_id FROM permissions WHERE role = #{role}') } ) `) ``` **✨ 新特性**: - `Q()` 是 `Query()` 的简写,专用于嵌套 - 智能识别单行Q()调用,自动添加return - 使用文本插入时自动导入fmt包 ## 完整示例 ### 源文件 (user_service.gox.go) ```go //go:generate goxgen . package main import ( "fmt" "database/sql" ) func GetUsersByStatus(db *sql.DB, status string) { // 基础Query query1 := Query(`SELECT * FROM users WHERE status = #{status}`) // 动态表名 tableName := "users" query2 := Query(`SELECT count(*) FROM {tableName}`) // 条件逻辑 includeDeleted := false query3 := Query(` SELECT * FROM users WHERE { if includeDeleted { return "1=1" } else { return "deleted_at IS NULL" } } `) fmt.Println("Query 1:", query1.String()) fmt.Println("Query 2:", query2.String()) fmt.Println("Query 3:", query3.String()) } func main() { GetUsersByStatus(nil, "active") } ``` ### 生成的文件 (user_service.go) ```go //go:generate goxgen . package main import ( "database/sql" "fmt" "github.com/yourusername/gox/pkg/runtime" ) func GetUsersByStatus(db *sql.DB, status string) { // 基础Query query1 := func() *runtime.Query { __gox_sql_0_builder := runtime.NewQueryBuilder() __gox_sql_0_builder.AddText("SELECT * FROM users WHERE status = ") __gox_sql_0_builder.AddParam(status) __gox_sql_0 := __gox_sql_0_builder.Build() return __gox_sql_0 }() // ... 其他生成的代码 } ``` ## Go Generate 工作流 ### 1. 创建 .gox.go 文件 ```go //go:generate goxgen . package main func main() { query := Query(`SELECT * FROM users WHERE id = #{123}`) fmt.Println(query.String()) } ``` ### 2. 运行 go generate ```bash # 处理当前目录 go generate ./... # 或手动处理特定目录 goxgen examples/ # 或处理单个文件 goxgen examples/user_service.gox.go ``` ### 3. 自动处理流程 goxgen 工具会自动: 1. 给 `.gox.go` 文件添加编译忽略指令 2. 解析 Query() 语法 3. 生成对应的 `.go` 文件 4. 自动添加 runtime 包导入 ## 语法对比 | 功能 | 旧语法 | 新语法 | ✨最新优化 | |------|-------|--------|------------| | 基础查询 | `sql { SELECT * FROM users }` | `Query(\`SELECT * FROM users\`)` | `Query(\`SELECT * FROM users\`)` | | 文本插入 | `sql { SELECT * FROM {table} WHERE id = #{id} }` | `Query(\`SELECT * FROM {table} WHERE id = #{id}\`)` | ✅ 自动导入fmt包 | | 嵌套查询 | `sql { ... sql { ... } ... }` | `Query(\`... { return Query('...') } ...\`)` | `Query(\`... { Q('...') } ...\`)` ✅ 简洁50% | | 文件类型 | `.gox` 文件 | `.gox.go` 文件 | `.gox.go` 文件 | ## 优势 ### 🎯 IDE 兼容性 - ✅ 不再有红色波浪线错误 - ✅ 正确的语法高亮 - ✅ 变量引用自动完成 - ✅ Go编译器类型检查 - ✅ IDE重构功能支持 ### 🚀 开发体验 - ✅ 看起来像正常的Go函数调用 - ✅ 使用熟悉的反引号字符串语法 - ✅ 标准的 go generate 工作流 - ✅ 与现有工具链完美集成 ### 🔧 功能强大 - ✅ 支持复杂的嵌套Query - ✅ 参数化查询防SQL注入 - ✅ 动态SQL构建 - ✅ 编译时代码生成 ## 项目结构 ``` gox/ ├── cmd/ │ └── goxgen/ # 新的 Go Generate 工具 ├── pkg/ │ ├── parser/ # Query() 语法解析器 │ ├── generator/ # Go 代码生成器 │ └── runtime/ # 运行时支持库 ├── examples/ # 示例项目 │ ├── *.gox.go # 源文件 │ └── *.go # 生成的文件 └── docs/ # 文档 ``` ## 测试验证 ```bash # 构建工具 go build -o goxgen.exe cmd/goxgen/main.go # 测试基础语法 goxgen.exe examples/simple_query_test.gox.go # 测试参数化查询 goxgen.exe examples/param_query_test.gox.go # 测试嵌套Query goxgen.exe examples/nested_query_test.gox.go # 运行生成的代码 go run examples/simple_query_test.go ``` ## 详细文档 - [新Query语法指南](docs/new-query-syntax-guide.md) - [迁移指南](docs/migration-guide.md) - [语法规则](docs/syntax-rules.md) ## 许可证 MIT License