HowtoGo
Home / Standard Library / The net Package
Standard Library

The net Package

net is the foundation every network-facing Go program builds on: dialing and listening for TCP, UDP, and Unix sockets, parsing and inspecting IP addresses, and resolving hostnames. net/http, net/rpc, and this site's own TCP server and WebSocket guides all sit on top of it.

Examples

net.Dial takes a network ("tcp", "udp", "unix") and an address, returning a Conn once the connection succeeds.

conn, err := net.Dial("tcp", "example.com:80")
if err != nil {
    log.Fatal(err)
}
defer conn.Close()

Dial blocks until the connection is established. The returned Conn is a plain io.ReadWriteCloser, the same interface a file or a bytes.Buffer could satisfy.

conn, err := net.Dial("tcp", "example.com:80")
if err != nil {
    log.Fatal(err)
}
defer conn.Close()

fmt.Fprint(conn, "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n")

status, err := bufio.NewReader(conn).ReadString('\n')
fmt.Print(status)
Output
HTTP/1.1 200 OK

Dialing and listening

FunctionDescription
Dial(network, address string) (Conn, error)
Connects, blocking until the connection is up.
DialTimeout(network, address string, timeout time.Duration) (Conn, error)
net.DialTimeout("tcp", addr, 5*time.Second)
Dial with a ceiling on how long it may take.
Listen(network, address string) (Listener, error)
Opens a listening socket for a stream network.
ListenPacket(network, address string) (PacketConn, error)
pc, err := net.ListenPacket("udp", ":9001")
Opens a listening socket for a packet network.
Pipe() (Conn, Conn)
client, server := net.Pipe()
Two connected in-memory Conns.
FileConn(f *os.File) (Conn, error)
conn, err := net.FileConn(f)
Wraps an inherited descriptor as a Conn.
FileListener(f *os.File) (Listener, error)
ln, err := net.FileListener(f)
The same, for a listening socket.
FilePacketConn(f *os.File) (PacketConn, error)
The same, for a packet socket.

Typed dialing and listening

FunctionDescription
ResolveTCPAddr(network, address string) (*TCPAddr, error)
addr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:9000")
Parses and resolves a TCP host:port.
DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error)
c, err := net.DialTCP("tcp", nil, raddr)
Dial, typed to TCP.
ListenTCP(network string, laddr *TCPAddr) (*TCPListener, error)
ln, err := net.ListenTCP("tcp", laddr)
Listen, typed to TCP.
ResolveUDPAddr(network, address string) (*UDPAddr, error)
addr, err := net.ResolveUDPAddr("udp", "239.0.0.1:9999")
Parses and resolves a UDP host:port.
DialUDP(network string, laddr, raddr *UDPAddr) (*UDPConn, error)
c, err := net.DialUDP("udp", nil, raddr)
A UDP socket with one fixed peer.
ListenUDP(network string, laddr *UDPAddr) (*UDPConn, error)
c, err := net.ListenUDP("udp", laddr)
A UDP socket that receives from anyone.
ListenMulticastUDP(network string, ifi *Interface, gaddr *UDPAddr) (*UDPConn, error)
c, err := net.ListenMulticastUDP("udp4", ifi, gaddr)
Joins a multicast group on one interface.
ResolveUnixAddr(network, address string) (*UnixAddr, error)
addr, err := net.ResolveUnixAddr("unix", "/tmp/app.sock")
Parses a Unix socket path.
DialUnix(network string, laddr, raddr *UnixAddr) (*UnixConn, error)
c, err := net.DialUnix("unix", nil, raddr)
Connects to a Unix domain socket.
ListenUnix(network string, laddr *UnixAddr) (*UnixListener, error)
ln, err := net.ListenUnix("unix", laddr)
Listens on a Unix socket path.
ListenUnixgram(network string, laddr *UnixAddr) (*UnixConn, error)
The packet-oriented Unix socket.
ResolveIPAddr(network, address string) (*IPAddr, error)
addr, err := net.ResolveIPAddr("ip", "example.com")
Resolves a bare host, with no port.

Addresses, networks, and interfaces

FunctionDescription
ParseIP(s string) IP
net.ParseIP("192.168.1.10")
Parses an address. Returns nil on bad input.
IPv4(a, b, c, d byte) IP
net.IPv4(127, 0, 0, 1)
Builds an IPv4 address from four bytes.
ParseCIDR(s string) (IP, *IPNet, error)
Splits CIDR notation into an address and its network.
CIDRMask(ones, bits int) IPMask
net.CIDRMask(24, 32) // 255.255.255.0
Builds a mask of ones leading 1-bits.
ParseMAC(s string) (HardwareAddr, error)
hw, err := net.ParseMAC("00:1b:44:11:3a:b7")
Parses a hardware address.
JoinHostPort(host, port string) string
net.JoinHostPort("localhost", "8080")
Builds "host:port", bracketing an IPv6 host.
SplitHostPort(hostport string) (host, port string, err error)
host, port, err := net.SplitHostPort("[::1]:8080")
The inverse, and it understands brackets.
Interfaces() ([]Interface, error)
ifis, err := net.Interfaces()
Lists the machine's network interfaces.
InterfaceByName(name string) (*Interface, error)
ifi, err := net.InterfaceByName("eth0")
One interface, by name.
InterfaceByIndex(index int) (*Interface, error)
One interface, by index.
InterfaceAddrs() ([]Addr, error)
addrs, err := net.InterfaceAddrs()
Every address on every interface.

DNS lookups

FunctionDescription
LookupHost(host string) ([]string, error)
addrs, err := net.LookupHost("go.dev")
Hostname to addresses, as strings.
LookupIP(host string) ([]IP, error)
ips, err := net.LookupIP("go.dev")
The same, returning parsed addresses.
LookupAddr(addr string) ([]string, error)
names, err := net.LookupAddr("8.8.8.8")
Reverse DNS: address to hostnames.
LookupPort(network, service string) (int, error)
port, err := net.LookupPort("tcp", "https")
Service name to port number.
LookupCNAME(host string) (string, error)
The canonical name a host resolves through.
LookupMX(name string) ([]*MX, error)
mxs, err := net.LookupMX("gmail.com")
Mail exchanger records, sorted by preference.
LookupNS(name string) ([]*NS, error)
The name servers for a domain.
LookupTXT(name string) ([]string, error)
txts, err := net.LookupTXT("go.dev")
TXT records, one string per record.
LookupSRV(service, proto, name string) (string, []*SRV, error)
cname, srvs, err := net.LookupSRV("xmpp", "tcp", "example.com")
Service records, for discovery.

Core interfaces

Open a row for the interface's method set and what satisfies it.

TypeDescription
type Conn interface8 methods
A stream connection. This is what Dial hands back.
type Listener interface3 methods
A listening socket. One Accept, one connection.
type PacketConn interface7 methods
A packet socket. No peer, so every read reports a sender.
type Addr interface2 methods
An address on some network.
type Error interface2 methods
What every error in this package satisfies.

Types

Open a row for the type's full method set.

TypeDescription
type TCPConn struct22 methods
A TCP connection, with the TCP-only knobs.
type TCPListener struct7 methods
A TCP listener, returning typed connections.
type UDPConn struct22 methods
A UDP socket, connected or not.
type UnixConn struct20 methods
A Unix domain socket, stream or packet.
type UnixListener struct8 methods
A listener on a Unix socket path.
type IP []byte17 methods
An address, 4 or 16 bytes of it.
type IPNet struct3 methods
A network: a base address and a mask.
type IPMask []byte2 methods
A bitmask the same width as an address.
type TCPAddr struct3 methods
A resolved TCP endpoint. IP, Port, Zone.
type UDPAddr struct3 methods
A resolved UDP endpoint. IP, Port, Zone.
type UnixAddr struct2 methods
A socket path. Name and Net.
type IPAddr struct2 methods
An address with no port. IP and Zone.
type HardwareAddr []byte1 method
A MAC address.
type Dialer struct8 methods
A dialer you configure, and the one to use.
type ListenConfig struct4 methods
The listening side of Dialer.
type Resolver struct11 methods
The Lookup functions, with a context and a choice of resolver.
type Interface struct2 methods
One network interface. Index, MTU, Name, HardwareAddr, Flags.
type OpError struct4 methods
What almost every error from this package really is.
type DNSError struct4 methods
A failed lookup. Err, Name, IsTimeout, IsNotFound.
type AddrError struct3 methods
A malformed address. Err and Addr.

Values

ValueDescription
ErrClosed error
errors.Is(err, net.ErrClosed)
The socket was already closed.
DefaultResolver *Resolver
net.DefaultResolver.LookupHost(ctx, h)
The resolver every package-level Lookup uses.
IPv4len, IPv6len int
net.CIDRMask(24, 8*net.IPv4len)
4 and 16, the two address widths.
IPv4zero, IPv6zero IP
ip.Equal(net.IPv4zero)
The unspecified addresses, 0.0.0.0 and ::.
IPv4bcast IP
net.IPv4bcast
The limited broadcast address, 255.255.255.255.
IPv6loopback IP
ip.Equal(net.IPv6loopback)
::1.
FlagUp, FlagLoopback, FlagBroadcast, FlagMulticast Flags
ifi.Flags&net.FlagUp != 0
The interface status bits.
ErrWriteToConnected error
errors.Is(err, net.ErrWriteToConnected)
WriteTo was called on a connected socket.

net/http is built entirely on top of this package: http.ListenAndServe calls net.Listen internally and hands each accepted connection to its own request-handling goroutine.