★net | net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket.

net

net包有如下接口:

net.AddrNetwork() stringString() stringnet.Error()net.OpErrorTimeout() boolTemporary() boolerrornet.Listener()Accept() (Conn, error)Close() errorAddr() Addrnet.Connio.ReadWriterCloserRead(b []byte) (n int, err error)Write(b []byte) (n int, err error)Close() errorLocalAddr() AddrSetDeadline(t time.Time) errorSetReadDeadline(t time.Time) errorSetWriteDeadline(t time.Time) errornet.PacketConn()ReadFrom(p []byte) (n int, addr Addr, err error)io.ReaderFrom.ReadFrom(r Reader) (n int64, err error)WriteTo(p []byte, addr Addr) (n int, err error)io.WriterTo.WriteTo(w Writer) (n int64, err error)Close() errorLocalAddr() AddrSetDeadline(t time.Time) errorSetReadDeadline(t time.Time) errorSetWriteDeadline(t time.Time) error

PS: 为啥没写UDP的网络侦听器呢? 因为UDP协议是无连接的传输协议,性质决定了它不需要等待建立一条连接链路

核心函数如下:

Listen(network, address string) (Listener, error)Dial(network, address string) (Conn, error)DialTimeout(network, address string, timeout time.Duration) (Conn, error)FileListener(f *os.File) (ln Listener, err error)ParseXXXCIDRMask(ones, bits int) IPMaskSplitHostPort(hostport string) (host, port string, err error)func Pipe() (Conn, Conn)Interfaces() ([]Interface, error)

[1]gin中部分源码如下:

// fd是通过系统调用获得的描述符
f := os.NewFile(uintptr(fd), fmt.Sprintf("fd@%d", fd))
listener, err := net.FileListener(f)