0
아래 코드는 HTTP 호출을 만들고 응답을 받고, 응답을 닫고, ID가있는 채널에 쓰는 10,000 개의 go 루틴을 엽니 다.golang 채널을 사용한 세그먼트 위반
두 번째 for 루프에서 이전 버퍼링 된 채널에서 이전 이동 루틴의 ID를 인쇄합니다.
이로 인해 세그먼트 위반이 발생하며 그 이유를 파악할 수 없습니다.
공황 :
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x40 pc=0x2293]
코드 : API를 호출 할 때 당신은 어떤 오류를 확인하지 않는
package main
import (
"fmt"
"net/http"
)
func main() {
requests := 10000
ch := make(chan string, requests)
for i := 1; i <= requests; i++ {
go func(iter int) {
fmt.Println(iter)
resp, _ := http.Get("http://localhost:8080/api/project")
resp.Body.Close()
ch <- fmt.Sprint("%i", iter)
}(i)
}
for i := 1; i <= requests; i++ {
fmt.Println(<-ch)
}
}
를 항상 확인, 오류를. – JimB