TCP echo server
ln, err := net.Listen("tcp", ":8080")
if err != nil { log.Fatal(err) }
defer ln.Close()
for {
conn, err := ln.Accept()
if err != nil { log.Print(err); continue }
go func(c net.Conn) {
defer c.Close()
io.Copy(c, c)
}(conn)
}
Dial — make an outgoing connection
conn, err := net.Dial("tcp", "example.com:80")
if err != nil { log.Fatal(err) }
defer conn.Close()
fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")
io.Copy(os.Stdout, conn)
Dialer — timeouts and keep-alive
net.Dial gives you a default dialer. Construct your own for timeouts, local address binding, or context cancellation.
d := &net.Dialer{Timeout: 5 * time.Second, KeepAlive: 30 * time.Second}
conn, err := d.DialContext(ctx, "tcp", "example.com:443")