摘星揽月 发表于 前天 20:31

【解决方案】Marten支持库

近期,封装了Marten支持库,该库与Gin库一样,均为web库,Marten 在保持零依赖的同时,性能与 Gin 和 Echo 相当。下面是与其他库的比较。


使用方法如下:
<火山程序 类型 = "通常" 版本 = 1 />

变量 app <参考 类型 = Marten应用程序>
变量 router <参考 类型 = Marten路由类>
变量 api <参考 类型 = Marten路由组类>
app = Marten应用程序.创建 ()
users = 文本到用户哈希表.创建 (0)
router = app.取路由 ()

变量 logger <类型 = Marten日志配置类>
logger = Marten日志配置类.取默认配置 ()
logger.启用颜色 = 真
// logger.启用JSON格式 = 真
router.使用 (Marten中间件类.请求ID中间件 (), Marten中间件类.日志中间件2 (logger), Marten中间件类.恢复中间件 (), Marten中间件类.跨域资源共享中间件 (Marten跨域资源共享配置类.取默认配置 ()))
router.注册GET2 ("/health")
{
    局部返回 (Marten路由类.取上下文 ().发送成功 (Marten哈希表.创建哈希表 ("status", "healthy")))
}

api = router.创建路由组 ("/api/v1")
api.注册GET ("/users", Marten处理程序类.创建 (列表))
api.注册GET ("/users/:id", Marten处理程序类.创建 (取用户))
api.注册POST ("/users", Marten处理程序类.创建 (添加用户))
api.注册PUT ("/users/:id", Marten处理程序类.创建 (更新用户))
api.注册DELETE ("/users/:id", Marten处理程序类.创建 (删除用户))
app.运行2 (, 3 * 时间段.秒)


方法 列表 <公开 类型 = 错误接口 折叠>
参数 上下文 <类型 = Marten上下文>
{
    usersMu.加读锁 ()
    延迟执行 ()
    {
      usersMu.解读锁 ()
    }
    变量 list <类型 = 用户数组类>
    变量 u <类型 = 用户类>
    list = 用户数组类.创建 (0)
    users.值遍历循环 (u)
    {
      list.加入成员 (u)
    }

    返回 (上下文.发送成功 (Marten哈希表.创建哈希表 ("users", list).添加 ("total", list.取成员数 ())))
}

方法 取用户 <公开 类型 = 错误接口 折叠>
参数 上下文 <类型 = Marten上下文>
{
    变量 id <类型 = 文本型>
    变量 user <类型 = 用户类>
    id = 上下文.取请求路径参数 ("id")
    usersMu.加读锁 ()
    user = users.读 (id)
    usersMu.解读锁 ()
    如果 (user == 空对象)
    {
      返回 (上下文.发送未找到 ("未找到数据"))
    }
    否则
    {
      返回 (上下文.发送成功 (user))
    }
}

方法 添加用户 <公开 类型 = 错误接口 折叠>
参数 上下文 <类型 = Marten上下文>
{
    变量 input <类型 = 输入验证类>
    变量 错误 <类型 = 错误接口 值 = 空对象>
    上下文.请求绑定验证2 (input, 错误)
    {
      如果 (input.姓名 == "")
      {
            Marten上下文.置返回 (Marten绑定错误类.创建 ("姓名必填").取错误 ())
      }
      否则 (input.邮件 == "")
      {
            Marten上下文.置返回 (Marten绑定错误类.创建 ("邮件必填").取错误 ())
      }
      否则
      {

            Marten上下文.置返回 ()
      }
    }

    如果 (错误 != 空对象)
    {
      返回 (上下文.发送错误请求 (错误.信息))
    }

    usersMu.加锁 ()
    变量 id <类型 = 文本型>
    id = 取格式文本 ("%d", nextID)
    nextID = nextID + 1
    变量 user <类型 = 用户类>
    user.编号 = id
    user.姓名 = input.姓名
    user.邮件 = input.邮件
    user.创建时间 = 取现行时间 ()
    users.写 (id, user)
    usersMu.解锁 ()
    返回 (上下文.发送已创建 (user))
}

方法 更新用户 <公开 类型 = 错误接口 折叠>
参数 上下文 <类型 = Marten上下文>
{
    变量 input <类型 = 输入验证类>
    变量 错误 <类型 = 错误接口 值 = 空对象>
    变量 id <类型 = 文本型>
    变量 user <类型 = 用户类>
    id = 上下文.取请求路径参数 ("id")
    usersMu.加读锁 ()
    user = users.读 (id)
    usersMu.解读锁 ()
    如果 (user == 空对象)
    {
      返回 (上下文.发送未找到 ("未找到数据"))
    }

    错误 = 上下文.请求绑定 (input)
    如果 (错误 != 空对象)
    {
      局部返回 (上下文.发送错误请求 (错误.信息))

    }

    如果 (input.姓名 != "")
    {
      user.姓名 = input.姓名
    }
    如果 (input.邮件 != "")
    {
      user.邮件 = input.邮件
    }

    usersMu.加锁 ()
    users.写 (id, user)
    usersMu.解锁 ()

    返回 (上下文.发送成功 (user))
}

方法 删除用户 <公开 类型 = 错误接口 折叠>
参数 上下文 <类型 = Marten上下文>
{
    变量 id <类型 = 文本型>
    变量 user <类型 = 用户类>
    id = 上下文.取请求路径参数 ("id")
    usersMu.加锁 ()
    user = users.读 (id)
    如果 (user != 空对象)
    {
      users.删除 (id)
    }

    usersMu.解锁 ()

    如果 (user == 空对象)
    {
      返回 (上下文.发送未找到 ("数据未找到"))
    }

    返回 (上下文.发送无内容 ())

}





yb1984724 发表于 昨天 10:44

:):):)太厉害啦,支持!~

山梦 发表于 昨天 11:41


太厉害啦,支持!~
页: [1]
查看完整版本: 【解决方案】Marten支持库