用vscode远程连接到docker,debug上面的go代码 安装必要的VSCode扩展: Remote Development 扩展包 Go 扩展 ![[Pasted image 20240712180338.png]] ![[Pasted image 20240712180417.png]] 确保Docker容器正在运行,并且已经映射了必要的端口. 在VSCode中,使用Remote Explorer连接到Docker容器: 点击左侧活动栏的Remote Explorer图标 在Containers部分找到目标容器 右键点击容器,选择"Attach to Container" VSCode会打开一个新窗口,连接到容器环境. ![[Pasted image 20240712180635.png|300]] 在容器环境中打开Go项目文件夹. 配置调试设置:- 创建或编辑.vscode/launch.json文件 ![[Pasted image 20240712175927.png|400]] 添加Go调试配置,例如:json { “name”: “Debug Go Program”, “type”: “go”, “request”: “launch”, “mode”: “debug”, “program”: “${workspaceFolder}/server.go”, “args”: ["–config=config/dev_local.yml"] } 设置断点并启动调试: 在代码中设置断点 点击Run and Debug视图 选择刚才创建的调试配置 点击开始调试按钮或按F5 现在你可以在容器环境中调试Go代码,包括单步执行、查看变量等. ![[Pasted image 20240712175744.png]]
Posts
` #感知器 class Perceptron: def init(self, num_inputs=2, weights=[1,1]): self.num_inputs = num_inputs self.weights = weights #加权和 def weighted_sum(self, inputs): weighted_sum = 0 for i in range(self.num_inputs): weighted_sum += self.weights[i]*inputs[i] return weighted_sum #激活函数 def activation(self, weighted_sum): if weighted_sum >= 0: return 1 if weighted_sum < 0: return -1 #训练 def training(self, training_set): foundLine = False while not foundLine: total_error = 0 for inputs in training_set: prediction = self.activation(self.weighted_sum(inputs)) actual = training_set[inputs] error = actual - prediction total_error += abs(error)...
使用 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/?...
按照以下步骤来初始化和管理 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
Generate all the required files to start on a new GraphJin app macuser03@macuser03noMacBook-Pro test % graphjin new blog INFO Created: blog INFO Created: blog/Dockerfile INFO Created: blog/docker-compose.yml INFO Created: blog/config INFO Created: blog/config/dev.yml INFO Created: blog/config/prod.yml INFO Created: blog/config/seed.js INFO Created: blog/config/migrations INFO Created: blog/config/migrations/0_init.sql INFO Created: blog/config/scripts INFO Created: blog/config/queries INFO Created: blog/config/queries/getUsers.gql INFO App initialized: blog Modify docker-compose.yml macuser03@macuser03noMacBook-Pro test % vi blog/docker-compose.yml services: # Postgres DB db: # image: postgres:12 image: postgres:latest environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres volumes: - ....
初始化模块 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....
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:数据库连接字符串。
更加通用和可扩展的设计方案,包括架构图、详细说明和核心代码。 架构图 ┌─────────────┐ ┌─────────────────────────────────────┐ │ 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....
目的: 实现一个评论系统,允许用户对报告进行评论。 当新评论创建时,生成通知并存储到队列中。 通过邮件和实时 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....
Setting up macOS CLang and macOS Developmeng Dependencies $ xocode-select --install Rust $ brew install rust $ rustc --version rustc 1.79.0 (129f3b996 2024-06-10) (Homebrew) Javascirpt ecosystem $ brew install node $ brew install pnpm $ node -v v22.5.1 $ pnpm -v 9.6.0 $ pnpm create vite .../191022c54b0-1753a | +1 + .../191022c54b0-1753a | Progress: resolved 1, reused 1, downloaded 0, added 1, done ✔ Project name: … pilot-desk ✔ Target directory "pilot-desk" is not empty....