go 路由树

go包:github.com/k-sone/critbitgo

demo:

package main
  
import (
        "fmt"
        "github.com/k-sone/critbitgo"
)

func main() {
        fmt.Println("Hello, World!")

        trie := critbitgo.NewNet()
        trie.AddCIDR("1.1.0.0/16", "value1")
        trie.AddCIDR("1.1.1.0/24", "value2")
        trie.AddCIDR("1.1.1.0/25", "value3")
        trie.AddCIDR("1.1.1.100/32", "value4")
        trie.AddCIDR("1.1.1.200/27", "value5")

        a, b, c := trie.MatchCIDR("1.1.1.0/25")
        fmt.Println("a=%+v, b=%+v, c=%+v", a, b, c)

        a, b, c = trie.MatchCIDR("1.1.2.0/24")
        fmt.Println("a=%+v, b=%+v, c=%+v", a, b, c)
}

执行结果:

Hello, World!
a=%+v, b=%+v, c=%+v 1.1.1.0/25 value3 <nil>
a=%+v, b=%+v, c=%+v 1.1.0.0/16 value1 <nil>
原文地址:https://www.cnblogs.com/wangjq19920210/p/14519819.html