papp

package
v0.0.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 7, 2026 License: MIT Imports: 25 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddWhiteList added in v0.0.6

func AddWhiteList(paths ...string)

func CheckMysql added in v0.0.7

func CheckMysql(models []any) error

--------------------------------------------------

func CheckRabbitMQ added in v0.0.7

func CheckRabbitMQ() error

func CheckRedis added in v0.0.7

func CheckRedis() error

--------------------------------------------------

func GenToken

func GenToken(userId int32) (string, error)

func GetTokenFromCtx added in v0.0.6

func GetTokenFromCtx(ctx context.Context) (*claims, error)

func NewRunner added in v0.0.7

func NewRunner(name string) *runner

func ParseToken

func ParseToken(tokenString string) (*claims, error)

func RunKratosApp

func RunKratosApp(kratosServers ...kratosServer)

func SetHTTPAuthExpire added in v0.0.6

func SetHTTPAuthExpire(expire time.Duration)

func SetHTTPAuthKey added in v0.0.6

func SetHTTPAuthKey(key string)

Types

type AppCtx added in v0.0.6

type AppCtx struct {
	context.Context

	// 业务通用传递字段
	UserId int32

	// 需要与ctx绑定的工具对象
	Log *plogger.PLogWarper
	// contains filtered or unexported fields
}

-------------------------------------------------- 封装一个请求的上下文

-------------------------------------------------- 1:基础库保持通用性,使用标准 context.Context,通过依赖注入传递工具 2:框架回调入口处完成 AppCtx 创建,后续业务代码直接传递

3:业务层统一使用 AppCtx,享受便捷的日志、追踪和状态管理等等封装

减少样板代码:避免重复提取 trace_id、user_id 等字段
统一日志格式:自动为所有日志添加追踪字段
保持类型安全:结构体字段替代 context.Value 类型转换
提升开发效率:业务代码中提供简单直观的 API

-------------------------------------------------- 选择在/pkg/app层封装AppCtx,因为这是业务层与基础设施层的分界点。 业务层处理具体业务逻辑,需要便捷访问请求级数据(如用户信息、追踪ID), 而基础库应保持通用性,如基础层需要嵌入业务相关处理,应该以注入的方式进行。 这样设计希望能在业务便捷性和架构清晰度之间取得平衡。

-------------------------------------------------- 我们最终可以这样去比喻:

在处理业务开发时,想象入住一家高级酒店,每位客人入住时都会分配一位专属管家。管家提前知道客人的姓名、偏好、行程安排等所有信息。客人只需对管家说“安排明天的行程”,管家就会自动安排好车辆、餐厅、景点门票等一切事务。

而处理基建开发时,想想这是一家标准化的连锁餐厅,提供统一的厨房设备、食材和烹饪流程。但允许各分店根据当地口味调整调料和配菜。总店提供核心厨艺培训,分店可以注入本地特色食材。

-------------------------------------------------- 封装位置决策树

问1:这个功能是否与当前请求的上下文强相关?
↓
├── 是(如:需要用户ID、trace_id、请求超时)
│   └── 问2:是否业务层所有模块都需要?
│       ├── 是 → 升级"AppCtx管家"的能力(添加到AppCtx结构体/方法)
│       └── 否 → 业务模块自行处理("客人自己解决")
│
└── 否(如:通用工具、数据转换、第三方集成)
    ↓
    ├── 问3:是否会被多个业务模块使用?
    │   ├── 是 → 开发基础库功能("标准化餐厅的新菜式")
    │   │   ├── 问4:是否需要业务上下文?
    │   │   │   ├── 是 → 支持依赖注入(接受Logger等)或参数传递("客人定制")
    │   │   │   └── 否 → 保持纯净实现
    │   │   │
    │   │   └── 问5:是否预期会被其他项目使用?
    │   │       ├── 是 → 放在通用/pkg/
    │   │       └── 否 → 放在项目内部/internal/pkg/
    │   │
    │   └── 否 → 直接在业务模块中实现("分店特色菜")
    │
    └── 问6:是否是横切关注点(如:日志、监控、缓存)?
        ├── 是 → 设计为中间件/拦截器模式
        └── 否 → 继续按常规判断

--------------------------------------------------

func NewAppCtx added in v0.0.6

func NewAppCtx(ctx context.Context) *AppCtx

type ServiceConfig

type ServiceConfig struct {
	Http httpConfig
	Grpc grpcConfig
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL