Home  >  Article  >  Backend Development  >  go http.ListenAndServe not waiting for connection looks like exiting

go http.ListenAndServe not waiting for connection looks like exiting

WBOY
WBOYforward
2024-02-14 22:12:08872browse

go http.ListenAndServe 不等待连接看起来像是退出

php editor Youzi will introduce you to an interesting and common question in this article, that is, when using the http.ListenAndServe function in the Go language, why does it look like Exited without waiting for connection. This question may be confusing, but it is actually caused by the concurrency characteristics of the Go language. In the following content, we will explain the cause of this problem in detail and give solutions to help readers better understand and use the http.ListenAndServe function in Go language.

Question content

I have a simple application and I want it to be a daemon waiting for connections but it looks like it's not listening and I can't even find it in the process list to it.

Code:

package main

import (
        "fmt"
        "log"
        "net/http"
)

func main() {
        fmt.Println("Start Server")
        log.Print("Start Server")
        http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
                fmt.Fprintln(w, "Hello, World! from linux")
        })
        log.Print("Going to listen")
        if err := http.ListenAndServe(":80", nil); err != err {
          log.Print("getting error")
          log.Fatal(err)
        }
        fmt.Println("End  Server")
        log.Print("End  Server")
}

Compile and run:

xxx@xxx:~/go_test$ CGO_ENABLED=0 go build -gcflags "all=-N -l" -o ./main
    umen@umen:~/go_test$ ./main
Start Server
2023/11/15 07:40:22 Start Server
2023/11/15 07:40:22 Going to listen
End  Server
2023/11/15 07:40:22 End  Server

Try to connect:

xxx@xxx:~$ curl http://localhost
curl: (7) Failed to connect to localhost port 80 after 0 ms: Connection refused

What am I missing here?

renew

Removed Fatal, which still starts and stops without listening for get requests.

Workaround

log.Fatal("Going to Listen") Terminate your application execution.

references:

The above is the detailed content of go http.ListenAndServe not waiting for connection looks like exiting. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete