go 语言使用xo生成数据库表结构体

xo 是一个 Go 工具,用于生成从数据库表到 Go 结构体的代码。它可以自动为表生成对应的结构体和方法,并支持许多自定义选项。 安装 xo 工具 go install github.com/xo/xo@latest 配置 xo 生成代码 xo 工具提供了多种选项来生成代码,包括指定表、数据库连接和字段标签格式。你可以通过命令行参数来指定这些选项。 示例命令 假设你有一个 PostgreSQL 数据库,并且你只想生成名为 notifications 表的结构体,且字段注释格式为 json:"field_name",可以使用以下命令: xo --json tags \ --schema public \ --no-recurse \ --only notifications \ -o ./models \ postgres://username:password@localhost:5432/database_name 命令说明 --json tags:生成 JSON 标签。xo 支持多种标签格式,包括 json:"field_name"。 --schema public:指定数据库模式(schema)。默认为 public。 --no-recurse:防止递归生成所有表。如果只指定了 --only,可以省略。 --only notifications:只生成 notifications 表的结构体。 -o ./models:指定生成的代码目录。 postgres://username:password@localhost:5432/database_name:数据库连接字符串。

七月 19, 2024 · 1 分钟 · 59 字 · Me

通知和发信的架构演进

更加通用和可扩展的设计方案,包括架构图、详细说明和核心代码。 架构图 ┌─────────────┐ ┌─────────────────────────────────────┐ │ Client │◄────┤ Chi Router (HTTP + SSE Endpoints) │ └─────────────┘ └───────────────────┬─────────────────┘ │ ┌───────────────────▼─────────────────┐ │ Go Application Logic │ │ ┌────────────────────────────────┐ │ │ │ Event Trigger (e.g. Comment)│ │ │ └────────────────┬───────────────┘ │ │ ┌────────────────▼───────────────┐ │ │ │ Notification Queue Handler │ │ │ └────────────────┬───────────────┘ │ │ ┌────────────────▼───────────────┐ │ │ │ Notification Processor (Timer) │ │ │ └────────────────┬───────────────┘ │ └───────────────────┬─────────────────┘ │ ┌─────────────────────────┼─────────────────────────┐ │ │ │ ┌─────────▼─────────┐ ┌─────────▼─────────┐ ┌─────────▼─────────┐ │ PostgreSQL DB │ │ Notification │ │ Configuration │ │ (Bun ORM) │ │ Services │ │ Manager │ └───────────────────┘ │ - Email │ └───────────────────┘ │ - SSE │ │ - Push │ └───────────────────┘ 详细说明 Client: 用户界面或其他服务,与系统交互。 Chi Router: 处理 HTTP 请求和 SSE 连接。 Go Application Logic: Event Trigger: 处理触发通知的事件(如评论创建)。 Notification Queue Handler: 将通知添加到队列中。 Notification Processor: 定时处理队列中的通知。 PostgreSQL DB: 使用 Bun ORM 存储应用数据和通知队列。 Notification Services: 实现不同类型的通知发送(邮件、SSE、推送等)。 使用接口设计,便于添加新的通知类型。 Configuration Manager: 管理通知渠道的配置。 允许动态调整通知行为。 核心代码 数据模型 // models....

七月 19, 2024 · 4 分钟 · 717 字 · Me

go 语言使用chi和bun实现sse消息推送

初始化模块 cd test go mod init jinsse 安装xo并生成model go install github.com/xo/xo@latest xo schema "postgres://myuser:mypassword@localhost:5432/shimazu?sslmode=disable" -o internal/models ls internal/models db.go文件:internal/db/dg.go package db import ( "database/sql" "github.com/uptrace/bun" "github.com/uptrace/bun/dialect/pgdialect" "github.com/uptrace/bun/driver/pgdriver" ) func SetupDatabase() *bun.DB { dsn := "postgres://myuser:mypassword@localhost:5432/shimazu?sslmode=disable" sqldb := sql.OpenDB(pgdriver.NewConnector(pgdriver.WithDSN(dsn))) db := bun.NewDB(sqldb, pgdialect.New()) return db } main.go文件: package main import ( “context” “encoding/json” “fmt” “log” “net/http” “strconv” “time” "github.com/go-chi/chi" "github.com/go-chi/chi/middleware" "github.com/go-chi/cors" "github.com/uptrace/bun" . "sse/internal/db" . "sse/internal/models" ) func streamComments(w http.ResponseWriter, r *http....

七月 18, 2024 · 7 分钟 · 1298 字 · Me

初始化和管理 Go 项目

按照以下步骤来初始化和管理 Go 项目: 初始化模块: 在你的项目目录中打开终端,运行以下命令来初始化一个新的 Go 模块: go mod init your_project_name 这里的 `your_project_name` 通常是你项目的名称或者仓库路径(如 github.com/yourusername/projectname)。 2. 编辑 main.go: 确保你的 main.go 文件包含了正确的包声明和必要的导入:go ```go package main import ( "fmt" // 其他需要的包 ) func main() { // 你的代码 } 添加依赖(如果需要): 如果你的 main.go 使用了任何外部包,你可以直接在代码中导入它们。 然后运行: go mod tidy 这个命令会自动下载必要的依赖,并更新 go.mod 文件。 运行程序: 现在你可以直接运行你的程序: go run main.go 构建程序(可选): 如果你想构建一个可执行文件,可以运行: go build

七月 17, 2024 · 1 分钟 · 56 字 · Me