Go 什么';在Tcp连接侦听器中,延迟的用途是什么

Go 什么';在Tcp连接侦听器中,延迟的用途是什么,go,Go,我最近开始学习TCP,我了解延迟在文件创建和其他方面的工作原理,但我不了解在TCP中使用延迟的原因是当服务器侦听传入请求时,它就像一个无限循环,这样TCP永远不会停止侦听请求,除非它被命令行中断 以下面的代码为例: package main import ( "fmt" "log" "net" ) func listenConnection(conn net.Conn) { for {

我最近开始学习TCP,我了解延迟在文件创建和其他方面的工作原理,但我不了解在TCP中使用延迟的原因是当服务器侦听传入请求时,它就像一个无限循环,这样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 )
    }
}

延迟语句在这种情况下是如何工作的?

它在任何上下文中都是一样的:它在包含函数完成后执行。在这种情况下,当
main()
终止时,延迟函数将运行


您的困惑似乎在于
main()
中有一个无限循环。实际上没有:当
listener.Accept()
返回错误时,循环将终止,因为随后会调用
log.Fatal
,从而终止整个程序。

Wow。感谢@flimzyQuick提问:什么会触发listener.Accept()中的错误,不包括命令行中断@Flimzy回答这个问题的最好方法是阅读源代码:谢谢@Flimzy