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

针对报告的评论的邮件和在线消息通知系统设计

目的: 实现一个评论系统,允许用户对报告进行评论。 当新评论创建时,生成通知并存储到队列中。 通过邮件和实时 SSE 向相关用户发送通知。 确保通知系统的可静性、实时性和可扩展性。 处理用户在线/离线状态,确保通知能够及时送达在线用户。 设计说明: 数据模型:使用 PostgreSQL 数据库,通过 Bun ORM 进行数据操作。 Web 框架:使用 Chi 作为 HTTP 路由器。 通知机制:实现了一个基于队列的通知系统,支持邮件和 SSE 实时通知。 异步处理:使用 Go 协程处理通知,避免阻塞主请求。 实时通信:使用 Server-Sent Events (SSE) 实现实时通知。 会话管理:实现了基本的用户认证和会话跟踪机制。 架构图: ![[Pasted image 20240719115045.png]] 详细说明: 数据模型: 使用 Bun ORM 定义 Comment, Report, User, 和 NotificationQueue 模型。 NotificationQueue 用于存储待处理的通知。 评论创建与通知触发: 使用 Chi 中间件在评论创建后触发通知处理。 通知处理器将通知信息插入 NotificationQueue。 通知处理: 定时任务定期检查 NotificationQueue,处理待发送的通知。 对于邮件通知,直接发送邮件。 对于 SSE 通知,检查用户是否在线,如果在线则发送,否则保持待发送状态。 SSE 实现: 为每个在线用户维护一个 SSE 连接。 实现用户认证,确保只有登录用户可以建立 SSE 连接。 使用心跳机制保持连接活跃,并跟踪用户活动状态。 定期清理不活跃的连接。 会话管理: 实现基本的用户认证机制。 使用内存映射跟踪用户会话和最后活动时间。 详细代码: 数据模型 (models....

七月 19, 2024 · 6 分钟 · 1076 字 · 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

使用 GraphJin 的步骤

使用 GraphJin 的步骤 安装 GraphJin: go get github.com/dosco/graphjin 配置 GraphJin: 创建一个 config.yaml 文件,配置数据库连接等信息。 config.yaml # config.yaml app_name: "test graphql" host_port: 0.0.0.0:18081 port: 18081 web_ui: true database: type: postgres host: localhost port: 5432 dbname: graphjin_development user: postgres password: postgres queries: path: "./queries" allow_sql: true allow_list: queries: - GetReports - GetProjects - GetUser # Log levels: debug, error, warn, info log_level: "debug" # Log formats: json, plain log_format: "json" 启动 GraphJin:GraphQL Editor http://localhost:18081/?...

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