Skip to content

Commit 072b0c1

Browse files
committed
refactor(group): 采用 slices.Concat 代替 group.mergeOption
1 parent a80f1e8 commit 072b0c1

File tree

5 files changed

+13
-43
lines changed

5 files changed

+13
-43
lines changed

examples/ctx/ctx.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,7 @@ func methodNotAllowedBuilder(p types.Node) Handler {
5151
})
5252
}
5353

54-
func notFound(ctx *CTX) {
55-
ctx.W.WriteHeader(http.StatusNotFound)
56-
}
54+
func notFound(ctx *CTX) { ctx.W.WriteHeader(http.StatusNotFound) }
5755

5856
func NewRouters(o ...mux.Option) *Routers {
5957
return group.NewOf[Handler](call, HandlerFunc(notFound), methodNotAllowedBuilder, optionsHandlerBuilder, o...)

group/group.go

+1-19
Original file line numberDiff line numberDiff line change
@@ -74,30 +74,12 @@ func (g *GroupOf[T]) ServeHTTP(w http.ResponseWriter, r *http.Request) {
7474
//
7575
// 新路由会继承 [NewOf] 中指定的参数,其中的 o 可以覆盖由 [NewOf] 中指定的相关参数;
7676
func (g *GroupOf[T]) New(name string, matcher Matcher, o ...mux.Option) *mux.RouterOf[T] {
77-
o = g.mergeOption(o...)
77+
o = slices.Concat(g.options, o)
7878
r := mux.NewRouterOf(name, g.call, g.originNotFound, g.methodNotAllowedBuilder, g.optionsBuilder, o...)
7979
g.Add(matcher, r)
8080
return r
8181
}
8282

83-
// 将 g.options 与 o 合并,保证 g.options 在前且不会被破坏
84-
func (g *GroupOf[T]) mergeOption(o ...mux.Option) []mux.Option {
85-
l1 := len(g.options)
86-
if l1 == 0 {
87-
return o
88-
}
89-
90-
l2 := len(o)
91-
if l2 == 0 {
92-
return g.options
93-
}
94-
95-
ret := make([]mux.Option, l1+l2)
96-
size := copy(ret, g.options)
97-
copy(ret[size:], o)
98-
return ret
99-
}
100-
10183
// Add 添加路由
10284
//
10385
// matcher 用于判断进入 r 的条件,如果为空,则表示不作判断。

group/group_test.go

-17
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"github.com/issue9/assert/v4/rest"
1313

1414
"github.com/issue9/mux/v8"
15-
"github.com/issue9/mux/v8/internal/options"
1615
"github.com/issue9/mux/v8/internal/tree"
1716
"github.com/issue9/mux/v8/types"
1817
)
@@ -39,22 +38,6 @@ func newRouter(a *assert.Assertion, name string, o ...mux.Option) *mux.RouterOf[
3938
return r
4039
}
4140

42-
func TestGroupOf_mergeOption(t *testing.T) {
43-
a := assert.New(t, false)
44-
g := newGroup(a)
45-
oo, err := options.Build(g.mergeOption(mux.Lock(true))...)
46-
a.NotError(err).True(oo.Lock).Empty(oo.URLDomain)
47-
48-
g = newGroup(a, mux.Lock(true))
49-
oo, err = options.Build(g.mergeOption()...)
50-
a.NotError(err).True(oo.Lock).Empty(oo.URLDomain)
51-
oo, err = options.Build(g.mergeOption(mux.Lock(false))...)
52-
a.NotError(err).False(oo.Lock).Empty(oo.URLDomain)
53-
54-
oo, err = options.Build(g.mergeOption(mux.Lock(false), mux.URLDomain("https://example.com"))...)
55-
a.NotError(err).False(oo.Lock).Equal(oo.URLDomain, "https://example.com")
56-
}
57-
5841
func TestGroupOf_Use(t *testing.T) {
5942
a := assert.New(t, false)
6043
g := newGroup(a)

internal/tree/tree.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,11 @@ func New[T any](
5858
i *syntax.Interceptors,
5959
notFound T,
6060
trace bool,
61-
methodNotAllowedBuilder,
62-
optionsBuilder types.BuildNodeHandleOf[T],
61+
methodNotAllowedBuilder, optionsBuilder types.BuildNodeHandleOf[T],
6362
) *Tree[T] {
6463
s, err := i.NewSegment("")
6564
if err != nil {
66-
panic("发生了不该发生的错误,应该是 syntax.NewSegment 逻辑发生变化" + err.Error())
65+
panic("发生了不该发生的错误,应该是 syntax.NewSegment 逻辑发生变化" + err.Error())
6766
}
6867

6968
t := &Tree[T]{

router.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,16 @@ type (
6565
//
6666
// name 路由名称,可以为空;
6767
// methodNotAllowedBuilder 和 optionsBuilder 可以自定义 405 和 OPTIONS 请求的处理方式;
68+
// o 用于指定一些可选的参数;
69+
//
6870
// T 表示用户用于处理路由项的方法。
69-
func NewRouterOf[T any](name string, call CallOf[T], notFound T, methodNotAllowedBuilder, optionsBuilder types.BuildNodeHandleOf[T], o ...Option) *RouterOf[T] {
71+
func NewRouterOf[T any](
72+
name string,
73+
call CallOf[T],
74+
notFound T,
75+
methodNotAllowedBuilder, optionsBuilder types.BuildNodeHandleOf[T],
76+
o ...Option,
77+
) *RouterOf[T] {
7078
opt, err := options.Build(o...)
7179
if err != nil {
7280
panic(err)

0 commit comments

Comments
 (0)