【go语言 socket编程系列】 IP类型数据 type IP

【IP类型】 

type IP []byte
// IPv4 addresses are 4 bytes; IPv6 addresses are 16 bytes.
// An IPv4 address can be converted to an IPv6 address by
// adding a canonical prefix (10 zeros, 2 0xFFs).
// This library accepts either size of byte slice but always
// returns 16-byte addresses.

IP类型为一个byte的切片。

IPv4为4字节长,IPv6为16字节。

统一返回16字节长度的地址

【net.ParseIP方法】

func ParseIP(s string) IP

输入 string类型的 s  ,返回IP类型的数据,如果是非IP数据,则为nil

【代码实现】

package main

import (
	"fmt"
	"net"
	"unsafe"
)

func main() {
	myip := "192.168.100.100"

	fmt.Println("myip:")
	sizeof(myip)
	typeof(myip)
	fmt.Println("    len is:", len(myip)) //临时增加的代码,输出变量len

	addr := net.ParseIP(myip)
	fmt.Println("addr:")
	sizeof(addr)
	typeof(addr)
	fmt.Println("    len is:", len(addr))

	myerr := "1.1.1.1.1.1"
	erraddr := net.ParseIP(myerr)
	fmt.Println("erraddr is:", erraddr)
	if erraddr == nil {
		fmt.Println("no data")
	} else {
		sizeof(erraddr)
		typeof(erraddr)

	}

	//myip6 := "0:0:0:0:0:0:0:0"
	myip6 := "1:1:1:1:1:1:1:1"
	addrv6 := net.ParseIP(myip6)
	fmt.Println("addrv6:")
	if addrv6 == nil {
		fmt.Println("no data")
	} else {
		fmt.Println(addrv6)
		sizeof(addrv6)
		typeof(addrv6)
		fmt.Println("    len is:", len(addrv6))
	}

	var mystr string
	mystr = "999999999kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkksja;flksjdffffffffffffffkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkksooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooowe99sdfasdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddfasdab"
	fmt.Println("mystr")
	sizeof(mystr)
	typeof(mystr)
	fmt.Println("    len is:", len(mystr))

}
//获取变量类型
func typeof(v interface{}) {
	fmt.Printf("    type is: %T\n", v)
}
//获取长度
func sizeof(v interface{}) {
	fmt.Println("    size is:", unsafe.Sizeof(v))
}

执行结果如下:

myip:
    size is: 16
    type is: string
    len is: 15
addr:
    size is: 16
    type is: net.IP
    len is: 16
erraddr is: <nil>
no data
addrv6:
1:1:1:1:1:1:1:1
    size is: 16
    type is: net.IP
    len is: 16
mystr
    size is: 16
    type is: string
    len is: 785

即 net.IP类型的size 和len均为 为16 ,

猜你喜欢

转载自blog.csdn.net/natpan/article/details/82793946
今日推荐