Недавно я начал изучать TCP, я понимаю, как работает defer с точки зрения создания файлов и некоторых других вещей, но что я не понимаю в использовании defer в TCP, так это того, что когда сервер прослушивает входящий запрос, он как бесконечность l oop, так что TCP никогда не прекращает прослушивание запроса, за исключением того, что он прерывается командной строкой.
Возьмем, например, следующий код:
package main
import (
"fmt"
"log"
"net"
)
func listenConnection(conn net.Conn) {
for {
buffer := make([]byte, 1400)
size, err := conn.Read(buffer)
if err != nil {
fmt.Printf("Connection closed")
return
}
data := buffer[:size]
fmt.Printf("recieved message %s", data)
_, err = conn.Write(data)
if err != nil {
log.Fatalln(err)
}
}
}
func main() {
fmt.Println("Listening to localhost:5000")
listener, err := net.Listen("tcp", "localhost:5000")
if err != nil {
log.Fatalln(err)
}
defer listener.Close()
for {
conn, err := listener.Accept()
if err != nil {
log.Fatalln(err)
}
fmt.Println("New connection")
go listenConnection(conn )
}
}
Как оператор defer работает в таком сценарии?