• 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

  • 相关阅读:
    interview ms1 N_Dorm
    interview ms1 robert move **
    LeetCode OJ-- Jump Game II **
    LeetCode OJ-- Jump Game
    LeetCode OJ-- Palindrome Partitioning II ***
    LeetCode OJ--Palindrome Partitioning **
    LeetCode OJ--Palindrome Number
    LeetCode OJ-- Linked List Cycle II **
    3dContactPointAnnotationTool开发日志(十一)
    3dContactPointAnnotationTool开发日志(十)
  • 原文地址:https://www.cnblogs.com/zhepama/p/3024516.html
Copyright © 2020-2023  润新知