To use cidranger for fast IP lookups, initialize a new ranger using NewPCTrieRanger(), which implements a Path-Compressed prefix trie. You can then insert CIDR blocks using Insert() and perform lookups using Contains() or ContainingNetworks().
import (
"net"
"github.com/yl2chen/cidranger"
)
// 1. Create a new ranger
ranger := cidranger.NewPCTrieRanger()
// 2. Insert CIDR blocks
_, network1, _ := net.ParseCIDR("192.168.1.0/24")
_, network2, _ := net.ParseCIDR("128.168.1.0/24")
ranger.Insert(cidranger.NewBasicRangerEntry(*network1))
ranger.Insert(cidranger.NewBasicRangerEntry(*network2))
// 3. Test if an IP is contained in the ranger
contains, err := ranger.Contains(net.ParseIP("128.168.1.0")) // returns true, nil
contains, err = ranger.Contains(net.ParseIP("192.168.2.0")) // returns false, nil
// 4. Get all networks that contain the given IP
containingNetworks, err := ranger.ContainingNetworks(net.ParseIP("128.168.1.0"))