我真的不知道爲什麼。Goroutines打破了方案
問題是這樣的:我和朋友一起製作了一個web服務器。我認爲在頁面加載中使用goroutines會有好處,所以我就這樣做了:將loadPage函數作爲goroutine調用。但是,當這樣做時,服務器只會停止工作而沒有錯誤。它打印一張空白的白頁。問題必須在功能本身 - 某種程度上與goroutine有衝突。
這些都是相關的功能:
func loadPage(w http.ResponseWriter, path string) {
s := GetFileContent(path)
w.Header().Add("Content-Type", getHeader(path))
w.Header().Add("Content-Length", GetContentLength(path))
fmt.Fprint(w, s)
}
func GetFileContent(path string) string {
cont, err := ioutil.ReadFile(path)
e(err)
aob := len(cont)
s := string(cont[:aob])
return s
}
func GetFileContent(path string) string {
cont, err := ioutil.ReadFile(path)
e(err)
aob := len(cont)
s := string(cont[:aob])
return s
}
func getHeader(path string) string {
images := []string{".jpg", ".jpeg", ".gif", ".png"}
readable := []string{".htm", ".html", ".php", ".asp", ".js", ".css"}
if ArrayContainsSuffix(images, path) {
return "image/jpeg"
}
if ArrayContainsSuffix(readable, path) {
return "text/html"
}
return "file/downloadable"
}
func ArrayContainsSuffix(arr []string, c string) bool {
length := len(arr)
for i := 0; i < length; i++ {
s := arr[i]
if strings.HasSuffix(c, s) {
return true
}
}
return false
}
我沒有看到這些功能有什麼問題。 Goroutines就像守護線程,如果主要的goroutine退出,所有當前的goutoutines都不會被完成。檢查以確保您的主要常規不會在此結束之前退出。 – LinearZoetrope
是的,這是一個很好的事情來檢查。另外,你有沒有試過看看當你不同時運行時會發生什麼?一切正常嗎?這可能是該問題實際上並不是在goroutine中運行的事情。 – joshlf