을 위반했는데 왜 그 이유는 모르겠습니다.골 루틴이 프로그램
문제는 다음과 같습니다. 친구와 함께 웹 서버를 만들었습니다. 나는 페이지 로딩에서 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이 종료되면 현재의 모든 goroutines는 끝내지 않고 종료됩니다. 이 과정이 끝나기 전에 메인 골 루틴이 종료되지 않았는지 확인하십시오. – LinearZoetrope
네, 확인하는 것이 좋습니다. 또한, 동시에 실행하지 않을 때 어떤 일이 발생하는지 보았습니까? 모든 것이 제대로 작동합니까? 문제는 실제로 goroutines에서 실행중인 문제가 아닐 수도 있습니다. – joshlf