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>