如何组合杜松子酒中的路线组? [复制]

2024-04-24

我创建了两个不同的组gin具体路由/user and /todo在两个不同的包中,我想将它们合并到一个文件中。这是我的userroutes.go file.

package userrouter

import (
    "github.com/gin-gonic/gin"
)

//UserRoutes for user
func UserRoutes() *gin.RouterGroup {

    r := gin.Default()

    v1 := r.Group("/user")
    {

        v1.GET("/hello", func(c *gin.Context) {
            c.JSON(200, gin.H{
                "message": "pong",
            })
        })

    }
    return v1

}

and todoroutes.go as

package todorouter

import (
    "github.com/gin-gonic/gin"
)

//TodoRoutes for creating Todo
func TodoRoutes() *gin.RouterGroup {

    r := gin.Default()

    v2 := r.Group("/todo")
    {

        v2.GET("/hello", func(c *gin.Context) {
            c.JSON(200, gin.H{
                "message": "pong",
            })
        })

    }
    return v2

}

然后想将它们合并routes.go.

package router

import (
    todo "TODO/api/Routes/Todo/TodoRoutes"
    user "TODO/api/Routes/User/UserRoutes"
    "fmt"

    "github.com/gin-gonic/gin"
)


//Router for all routes
func Router() {
    // r := gin.Default()
    userRoutes := user.UserRoutes()
    todoRoutes := todo.TodoRoutes()

}

如何将它们合并到一个文件中,以便可以使用某个前缀来获取它们/api like localhost:8081/api/user/create or localhost:8081/api/todo/create。另外我需要创建r := gin.Default()在我创建的每条路线中,还是可以使用一次完成?谢谢。


只需创建一个超级组,然后在其下创建您的组即可。代码示例来说明我的意思:

    router := gin.New()
    
    superGroup := router.Group("/api")
    {
        userGroup := superGroup.Group("/user")
        {
            // user group handlers
        }
    
        todoGroup := superGroup.Group("/todo")
        {
            // todo group handlers
        }
    }

使用此代码,您无法像现在一样创建组,因为您的两个函数todorouter.TodoRoutes and userrouter.UserRoutes实例化自己的gin.Engine。所以你必须移动顶级引擎/api组到一个共同的地方。

如果需要,您可以将 api 组对象作为函数参数传递。例子:

//TodoRoutes for creating Todo
func TodoRoutes(apiGroup *gin.RouterGroup) {

    v2 := apiGroup.Group("/todo")
    {

        v2.GET("/hello", func(c *gin.Context) {
            c.JSON(200, gin.H{
                "message": "pong",
            })
        })

    }
}

然而,为了保持代码组织良好,我的建议是在同一位置实例化所有路由器,然后将处理程序放在单独的包中。

// package todoroutes
func HandleHello(c *gin.Context) {
            c.JSON(200, gin.H{
                "message": "pong",
            })
}

// package router
    router := gin.New()
    
    superGroup := router.Group("/api")
    {
        userGroup := superGroup.Group("/user")
        {
             userGroup.GET("/hello", todoroutes.HandleHello)
        }
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何组合杜松子酒中的路线组? [复制] 的相关文章

随机推荐

  • OpenCV Java:如何访问 findNonZero() 返回的坐标?

    在我的 Android 应用程序中 我正在使用findNonZero 查找并访问二值图像中的白点 我得到了图像 binMat大小 595 800 作为方法的输入 然后我有 Mat wLocMat Mat zeros binMat size
  • 推送时出现 git 错误 来自服务器的空回复

    我一直在尝试对现有存储库进行新的更改 但是 我不断收到以下错误 MacBook Pro spa git push origin master XX 的用户名 致命密码 无法访问 https github com XXXX https git
  • 如何从python字典中的给定名称获取键

    我有一个变量叫做 anime dict which contains a dictionary of lists of objects as shown below JI2212 Inu Yasha year 1992 rating 3 E
  • JavaScript Blob 对象何时被垃圾回收?

    在现代浏览器中 可以将大对象分配为Blob 然后通过 URL 请求访问它 此 URL 将在浏览器的其他位置提供存储的对象 例如图像的数据 浏览器如何知道何时不再需要这个 URL 以及相应的Blob数据可以免费被垃圾收集吗 浏览器最终将清除该
  • 如何在每次读取时更新配置?

    所以我有这样的课程 import yaml class Config def init self filename self config filename filename def read config file self with o
  • A-Frame:如何在 _blank 页面中打开动态创建的 a-link

    这是 A 型框架特有的 我正在从 javascript 代码创建一个 a link var alinkEl document createElement a link alinkEl setAttribute href http www f
  • PHP GD - 水平居中对齐文本并减小字体大小以将其保留在图像内

    希望你过得很好 我仍然是 php 的新手 所以在阅读了一些内容并检查了一些帖子之后 我能够使用 PHP GD 使用 imagecreatefrompng 函数在图像上放置一些文本 用户将进入一个表单 他们将能够输入他们的名字 并且名字将写在
  • Redux 调度导致组件本地状态重置

    我将 Redux 与 React 结合使用 我在用着this state 组件本地状态 保存组件特定变量 问题是 每当我调度操作 获取操作 和存储更新 安装 时 我的组件状态都会重置为初始状态 这对我的组件来说是正确的行为吗 第二次安装 重
  • Visual Studio 2012 中用户定义的 natvis 文件

    我正在尝试在我的项目中使用新的调试可视化工具 但 Visual Studio 发生了一些问题 它不再获取我的 natvis 文件 我尝试将它们复制到 USERPROFILE My Documents Visual Studio 2012 V
  • 错误请求 - 无效主机名 IIS7

    当我尝试在端口 8080 上访问我的网络应用程序时 出现以下错误 错误请求 无效主机名HTTP 错误 400 请求主机名无效 我什至不知道从哪里开始诊断这个问题 你检查一下绑定的是IIS吗 inetmgr exe 可能无法注册以接受 808
  • 在backbone.js 中缓存集合?

    确保我的集合保持缓存并仅获取一次的最佳方法是什么 我应该实现某种缓存层吗 我应该分享Collection变量到需要的地方 我可以信任 jQuery 的 AJAX 设置吗 ajaxSetup cache true 现在看起来的基本集合 the
  • 剪贴板大小限制

    复制到剪贴板的数据大小是否有限制 我正在使用 VB6 需要将数据块复制到剪贴板 应用程序调用GlobalAlloc GMEM MOVEABLE or GMEM DDESHARE 为要存储在剪贴板上的数据分配内存并使其可供其他应用程序使用 对
  • 如何在 R 中使用 dplyr “在事件之前”创建条件虚拟对象?

    我正在尝试使用规则创建条件虚拟 X 如果 NA 之前的最后两年 Y 1 则设置 X 1 仅计算一次 举个例子 这是我的数据中的一个样本 year country Y 1990 Bahamas 1 1991 Bahamas NA 1992 B
  • 如何在 WPF 中为用户控件创建用户定义(新)事件?一个小例子

    我有一个UserControl我正在其中使用Canvas 并在该画布中创建一个矩形 我想为该用户控件 画布和矩形 创建一个单击事件 然后我想在主窗口中使用它 问题是 我想为UserControl 怎么做 请展示一些例子或代码 A brief
  • 如果 vbs 脚本崩溃,请重新启动它

    我正在尝试制作一个 vb 脚本 如果它崩溃 它将重新启动另一个 vb 脚本 我搜索了又搜索 但我得到的只是如何重新启动程序 并且由于 vb 脚本是后台进程 因此当您在 Win32 Process 中搜索时它不起作用 这是我的代码 set S
  • 为 ARM 交叉编译 zlib

    我尝试为arm poky linux gnueabi交叉编译zlib 但启动 make 时出现错误 zlib 1 2 11 AR HOST ar CC HOST gcc RANLIB HOST ranlib configure prefix
  • 为什么最好使用 Glib 数据类型(例如 `gint` 而不是 `int`)? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么glib要重新定义类型 https stackoverflow com questions 1819561 why does glib redefine types 在 GTK 2 0 教程中
  • 用于计算机安全的遗传算法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在为大学选择项目 我对遗传算法和计算机安全的结合非常感兴趣 因此我的问题是 是否可以使用GAany计算机安全方面 例如 我正在考虑
  • Chrome 浏览器在从 selenium 加载后立即关闭

    我正在运行一个基本的 python 程序来打开 Chrome 窗口 但是一旦代码执行 该窗口就会在那里停留一秒钟 然后立即关闭 from selenium import webdriver import time browser webdr
  • 如何组合杜松子酒中的路线组? [复制]

    这个问题在这里已经有答案了 我创建了两个不同的组gin具体路由 user and todo在两个不同的包中 我想将它们合并到一个文件中 这是我的userroutes go file package userrouter import git