package main import ( "fmt" "log" "net" ) func handleConnection(conn net.Conn) error { buff := make([]byte, 4096) defer conn.Close() welcome := "=== Hola, Wikipedia! ===" conn.Write([]byte(welcome + "\n")) for { if n, err := conn.Read(buff); err != nil { return err } else if n == 0 { log.Println("Zero bytes, connection closed") break } else { msg := buff[0 : n-2] // trim "\r\n" log.Print(fmt.Sprintf("msg: %s", msg)) resp := fmt.Sprintf("You said: \"%s\"\r\n", msg) if n, err := conn.Write([]byte(resp)); err != nil { return err } else if n == 0 { log.Println("zero bytes, closing connection") break } } } return nil } func startSever() error { if ln, err := net.Listen("tcp", ":8008"); err != nil { return err } else { for { if conn, err := ln.Accept(); err != nil { log.Printf("Error accepting connection", err) continue } else { log.Println("New connection accepted") go func() { if err := handleConnection(conn); err != nil { log.Println("Error handling connection", err) } }() } } } } func main() { if err := startSever(); err != nil { log.Fatal(err) } }