Home > Article > Backend Development > How to Efficiently Check if an IP Address Falls Within a Range in Go?
Fast IP Range Checking in Go
In Go, efficiently determining if an IP address falls within a specified range is crucial for network management and security tasks. This article explores the swiftest approach to address this challenge.
The efficient way to check if an IP address is in a specific range is to compare it to the range endpoints using the bytes.Compare function. IP addresses are represented as bigendian []byte slices in Go, making this comparison accurate.
The code example below demonstrates this approach:
package main import ( "bytes" "fmt" "net" ) var ( ip1 = net.ParseIP("216.14.49.184") ip2 = net.ParseIP("216.14.49.191") ) func check(ip string) bool { trial := net.ParseIP(ip) if trial.To4() == nil { fmt.Printf("%v is not an IPv4 address\n", trial) return false } if bytes.Compare(trial, ip1) >= 0 && bytes.Compare(trial, ip2) <= 0 { fmt.Printf("%v is between %v and %v\n", trial, ip1, ip2) return true } fmt.Printf("%v is NOT between %v and %v\n", trial, ip1, ip2) return false } func main() { check("1.2.3.4") check("216.14.49.185") check("1::16") }
This code produces the following output:
1.2.3.4 is NOT between 216.14.49.184 and 216.14.49.191 216.14.49.185 is between 216.14.49.184 and 216.14.49.191 1::16 is not an IPv4 address
In summary, using bytes.Compare to compare IP addresses in range checks is the most efficient method in Go, allowing for accurate and fast determinations.
The above is the detailed content of How to Efficiently Check if an IP Address Falls Within a Range in Go?. For more information, please follow other related articles on the PHP Chinese website!