模块化业务代码

main
熊二 1 year ago
parent adb24eaf5d
commit 5d00d1987b
  1. 55
      pkg/app/context.go
  2. 15
      pkg/app/echo.go
  3. 16
      pkg/app/service.go

@ -0,0 +1,55 @@
package app
import (
"context"
"github.com/labstack/echo/v4"
"sync"
)
type Context struct {
context.Context
prefix string
store map[any]any
router *echo.Group
mu sync.RWMutex
}
// Prefix 设置路由前缀
func (c *Context) Prefix(prefix string) {
c.mu.Lock()
defer c.mu.Unlock()
if c.prefix != "" {
panic("already prefixed")
}
c.prefix = prefix
}
// Routes 注册路由
func (c *Context) Routes(routes Routable) {
c.mu.Lock()
defer c.mu.Unlock()
routes.InitRoutes(c.router)
}
// Set 设置值
func (c *Context) Set(key, val any) {
c.mu.Lock()
defer c.mu.Unlock()
c.store[key] = val
}
// Get 获取值,只会获取通过 Set 方法设置的值
func (c *Context) Get(key any) (any, bool) {
c.mu.RLock()
defer c.mu.RUnlock()
val, ok := c.store[key]
return val, ok
}
// Value 获取值
func (c *Context) Value(key any) any {
if val, ok := c.Get(key); ok {
return val
}
return c.Value(key)
}

@ -0,0 +1,15 @@
package app
import "github.com/labstack/echo/v4"
type echoContext struct {
echo.Context
ctx *Context
}
func (e *echoContext) Get(key string) any {
if val, ok := e.ctx.Get(key); ok && val != nil {
return val
}
return e.Context.Get(key)
}

@ -0,0 +1,16 @@
package app
import "github.com/labstack/echo/v4"
type Service interface {
// Init 初始化服务
Init(ctx *Context) error
// Start 启动服务
Start() error
// Stop 停止服务
Stop() error
}
type Routable interface {
InitRoutes(r *echo.Group)
}
Loading…
Cancel
Save