Yes, To16 gives you a 16 byte version of an IP address, which can be IPv4
or IPv6. Normally it is sufficient to just call To4 to determine if it is
an IPv4 address or not and assume if it is not it must be an IPv6 address:
func IsIPv4(ip net.IP) bool { return ip.To4() != nil }
func IsIPv6(ip net.
Ok, that's sufficient for me. It's only dangerous that if you switch the
cases (To16() first) it does not work any more.
Am Donnerstag, 16. Juni 2016 17:18:37 UTC+2 schrieb Paul Borman:
>
> Do you mean like To4 and To16 that are defined on net.IP?
>
> switch {
> case ip.To4() != nil:
> // is
Do you mean like To4 and To16 that are defined on net.IP?
switch {
case ip.To4() != nil:
// is an IPv4 address
case ip.To16() != nil:
// is an IPv6 address
default:
// is something else
}
On Wed, Jun 15, 2016 at 11:29 PM, wrote:
> Hi,
>
> In many software projects I have to get the
Hi,
In many software projects I have to get the address family of a net.IP
object. I always duplicate the following code:
func isIPv4(ip net.IP) bool {
return len(ip) == net.IPv4len || (len(ip) > 11 && isZeros(ip[0:10]) &&
ip[10] == 0xff && ip[11] == 0xff)
}
func isZeros(ip net.IP) bool {