diff --git a/tree.go b/tree.go index 761ae0ce..594e9999 100644 --- a/tree.go +++ b/tree.go @@ -265,15 +265,14 @@ func (t *Tree) addseg(segments []string, route interface{}, wildcards []string, } t.wildcard.addseg(segments[1:], route, append(wildcards, params...), reg+regexpStr) } else { - var ok bool var subTree *Tree - for _, subTree = range t.fixrouters { - if t.prefix == seg { - ok = true + for _, sub := range t.fixrouters { + if sub.prefix == seg { + subTree = sub break } } - if !ok { + if subTree == nil { subTree = NewTree() subTree.prefix = seg t.fixrouters = append(t.fixrouters, subTree) diff --git a/tree_test.go b/tree_test.go index 9f21c18c..531df046 100644 --- a/tree_test.go +++ b/tree_test.go @@ -221,6 +221,18 @@ func TestAddTree4(t *testing.T) { } } +// Test for issue #1595 +func TestAddTree5(t *testing.T) { + tr := NewTree() + tr.AddRouter("/v1/shop/:id", "shopdetail") + tr.AddRouter("/v1/shop/", "shophome") + ctx := context.NewContext() + obj := tr.Match("/v1/shop/", ctx) + if obj == nil || obj.(string) != "shophome" { + t.Fatal("url /v1/shop/ need match router /v1/shop/ ") + } +} + func TestSplitPath(t *testing.T) { a := splitPath("") if len(a) != 0 {