【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 ,