php小編柚子在這篇文章中將為大家介紹一個有趣而常見的問題,即在使用Go語言中的http.ListenAndServe函數(shù)時,為什么看起來像是沒有等待連接就退出了。這個問題可能會讓人困惑,但其實是由于Go語言的并發(fā)特性造成的。在接下來的內(nèi)容中,我們將詳細(xì)解釋這個問題的原因,并給出解決方案,幫助讀者更好地理解和使用Go語言中的http.ListenAndServe函數(shù)。
問題內(nèi)容
我有一個簡單的應(yīng)用程序,我希望它是一個等待連接的守護進(jìn)程,但它看起來像不監(jiān)聽,我什至在進(jìn)程列表中找不到它。
代碼:
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") }
登錄后復(fù)制
編譯并運行:
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
登錄后復(fù)制
嘗試連接:
xxx@xxx:~$ curl http://localhost curl: (7) Failed to connect to localhost port 80 after 0 ms: Connection refused
登錄后復(fù)制
我在這里缺少什么?
更新
刪除了 Fatal,它仍然在不監(jiān)聽 get 請求的情況下啟動和停止。
解決方法
log.Fatal("Going to Listen")
終止您的應(yīng)用程序執(zhí)行。
參考文獻(xiàn):
https://www.php.cn/link/004881ebe3826cf16cfd124968f2a5bb