《Shell 转 Go》
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

5.2 gin 路由树的实现(扩展)

gin 的路由树

与 cobra 相比, gin 的路由树实现就是另外一种方式了, 我称之为 生长。 换句话说, gin 路由的子节点不能独立于父节点 单独 定义。

// Group creates a new router group. You should add all the routes that have common middlewares or the same path prefix.
// For example, all the routes that use a common middleware for authorization could be grouped.
func (group *RouterGroup) Group(relativePath string, handlers ...HandlerFunc) *RouterGroup {
	return &RouterGroup{
		Handlers: group.combineHandlers(handlers),
		basePath: group.calculateAbsolutePath(relativePath),
		engine:   group.engine,
	}
}

从上面代码可以看出来, RouterGroup 是通过 Group 方法实现路由节点 生长 的, 在调用 Group 方法的时候,

  1. 必须 要传入 子节点 的相对路径
  2. 使用私有方法计算出 basePath 的值。

这个特别像怀孕生孩子, 一代接一代。 绝对错不了。 O.o

gin 的 RouterGroup 能实现 认亲/挂靠 模式吗?

肯定可以, 做个变形手术就好了。 这里挖个坑吧。