【TCPAddr】
TCPAddr 是一个包含 IP和port的 struct。其定义在tcpsock.go 文件中。
// TCPAddr represents the address of a TCP end point.
type TCPAddr struct {
IP IP
Port int
Zone string // IPv6 scoped addressing zone
}
【常用方法】
常用的方法有func ResolveTCPAddr(net, addr string) (*TCPAddr, error) ,通过输入net 和addr 来创建一个TCPAddr。
net 为 tcp tcp4 tcp6 的一种,如果是 "" 则默认为tcp。
addr 是 类似”g.cn:80“或者”127.0.0.1:80“的字符串。
其源码如下:
func ResolveTCPAddr(net, addr string) (*TCPAddr, error) {
switch net {
case "tcp", "tcp4", "tcp6":
case "": // a hint wildcard for Go 1.0 undocumented behavior
net = "tcp"
default:
return nil, UnknownNetworkError(net)
}
a, err := resolveInternetAddr(net, addr, noDeadline)
if err != nil {
return nil, err
}
return a.toAddr().(*TCPAddr), nil
}
【代码实现】
package main
import (
"fmt"
"net"
"os"
"unsafe"
)
func checkError(err error) {
if err != nil {
fmt.Println("Error !", err.Error())
os.Exit(1)
}
}
func typeof(v interface{}) {
fmt.Printf("type is:%T\n", v)
}
func sizeof(v interface{}) {
fmt.Println("sizeof is: ", unsafe.Sizeof(v))
}
func main() {
addr := "www.baidu.com:80"
tcpaddr, err := net.ResolveTCPAddr("", addr)
checkError(err)
fmt.Println("tcpaddr is:", tcpaddr)
fmt.Println("IP is:", tcpaddr.IP.String(), "Port is", tcpaddr.Port)
typeof(addr)
typeof(tcpaddr)
sizeof(addr)
sizeof(tcpaddr)
fmt.Println("addr len is:", len(addr))
fmt.Println("tcpaddr len is:", len(tcpaddr.String()))
}
执行结果
$./l_ResolvTCPAddr
tcpaddr is: 61.135.169.125:80
IP is: 61.135.169.125 Port is 80
type is:string
type is:*net.TCPAddr
sizeof is: 16
sizeof is: 16
addr len is: 16
tcpaddr len is: 17
$