Go 中高效检查某个范围内的 IP 地址
判断 IP 地址是否在指定范围内是各种网络中的常见需求运营。在 Go 中,有多种方法可以解决此任务。
最快方法:bytes.Compare
最有效的方法之一是使用 bytes.Compare 函数比较 IP 地址的字节表示。
import ( "bytes" "net" ) // Check if an IP address is within a range func check(trial, start, end net.IP) bool { if start.To4() == nil || end.To4() == nil || trial.To4() == nil { return false } return bytes.Compare(trial, start) >= 0 && bytes.Compare(trial, end) <= 0 }
在这种方法中,我们首先检查给定的 IP 地址是否是有效的 IPv4 地址。然后,我们使用 bytes.Compare 来比较试验 IP 的字节表示以及范围的起点和终点。如果两次检查的比较结果均为非负值,则表示 IP 地址在范围内。
使用示例
以下代码演示了bytes.Compare 方法的用法:
import ( "fmt" "net" ) var ( ip1 = net.ParseIP("216.14.49.184") ip2 = net.ParseIP("216.14.49.191") ) func main() { check := func(ip string) { trial := net.ParseIP(ip) res := check(trial, ip1, ip2) fmt.Printf("%v is %v within range %v to %v\n", trial, res, ip1, ip2) } check("1.2.3.4") check("216.14.49.185") check("216.14.49.191") }
输出:
1.2.3.4 is false within range 216.14.49.184 to 216.14.49.191 216.14.49.185 is true within range 216.14.49.184 to 216.14.49.191 216.14.49.191 is true within range 216.14.49.184 to 216.14.49.191
以上是Go中如何高效检查IP地址是否在某个范围内?的详细内容。更多信息请关注PHP中文网其他相关文章!