net包详解基础类型

ip.go 中定义了三个类型.分别是.IP,IPMask,IPNet

IP类型

IP类型被定义为一个字节数组。 ParseIP(String) 可以将字符窜转换为一个IP类型.

	name := "127.0.0.1"
	addr := net.ParseIP(name)
	fmt.Println(addr.IsLoopback())

常用方法

Equal(x IP) bool
比较两个IP地址是否相等
DefaultMask() IPMask
一个IP返回默认的掩码.返回的类型是IPMask
Mask(mask IPMask) IP
使用一个掩码可以使用一个IP地址的方法,找到该IP地址的网络
		func main() {
			name := "127.0.0.1"
			addr := net.ParseIP(name)
			fmt.Println(addr.Mask(net.IPv4Mask(byte(255), byte(255), byte(255), byte(0))))
			fmt.Println(addr.Mask(net.IPv4Mask(byte(128), byte(0), byte(0), byte(0))))
		}
	

IPMask类型

一个掩码的字符串形式是一个十六进制数,如掩码255.255.0.0为ffff0000。

  • func IPv4Mask(a, b, c, d byte) IPMask :用一个4字节的IPv4地址来创建一个掩码.
  • func CIDRMask(ones, bits int) IPMask : 用ones和bits来创建一个掩码

常用方法

Size() (ones, bits int)
返回ones和bits
				mask := net.IPv4Mask(byte(255), byte(255), byte(255), byte(0))
				 ones, bits := mask.Size()
		

IPNet类型

由IP类型和IPMask组成一个网段,其字符窜形式是CIDR地址,如:“192.168.100.1/24”或“2001:DB8::/ 48”

	func main() {
		mask := net.IPv4Mask(byte(255), byte(255), byte(255), byte(0))
		ip := net.ParseIP("192.168.1.125").Mask(mask)
		in := &net.IPNet{ip, mask}
		fmt.Println(in)         //	192.168.1.0/24
	}
Contains(ip IP) bool
检查ip是否在这个网段
			fmt.Println(in.Contains(net.ParseIP("192.168.1.55")))
		
Network() string
返回这个地址的network名称, "ip+net".

IPAddr类型

位于iprawsock.go中在net包的许多函数和方法会返回一个指向IPAddr的指针。这不过只是一个包含IP类型的结构体。

type IPAddr struct {
    IP   IP
}

这个类型的主要用途是通过IP主机名执行DNS查找。

ResolveIPAddr

ResolveIPAddr有两个参数第一个参数.必须为"ip","ip4","ip6",第二个参数多为要解析的域名.返回一个IPAddr的指针类型

	addr, _ := net.ResolveIPAddr("ip", "www.baidu.com")
	fmt.Println(addr)

TCPAddr类型

位于tcpsock.go中TCPAddr类型包含一个IP和一个port的结构:

type TCPAddr struct {
    IP   IP
    Port int
}

ResolveTCPAddr

func ResolveTCPAddr(net, addr string) (*TCPAddr, os.Error)
该函数用来创建一个TCPAddr,第一个参数为,tcp,tcp4或者tcp6,addr是一个字符串,由主机名或IP地址,以及":"后跟随着端口号组成,例如: "www.google.com:80" 或 '127.0.0.1:22"。如果地址是一个IPv6地址,由于已经有冒号,主机部分,必须放在方括号内, 例如:"[::1]:23". 另一种特殊情况是经常用于服务器, 主机地址为0, 因此,TCP地址实际上就是端口名称, 例如:":80" 用来表示HTTP服务器。

	addr, _ := net.ResolveTCPAddr("tcp", "www.baidu.com:80")
	fmt.Println(addr)   //220.181.111.147:80

UDPAddr类型

type UDPAddr struct {
	IP   IP
	Port int
}

ResolveUDPAddr

UnixAddr类型

type UnixAddr struct {
	Name string
	Net  string
}

ResolveUnixAddr

原文地址:https://www.cnblogs.com/zhepama/p/3024516.html