Go HTTP 가져오기로 교착 상태 오류 방지
Go에서 HTTP 통신에 net/http 패키지를 사용하면 영향을 미칠 수 있는 미묘한 동작이 발생합니다. 교착 상태 감지.
다음 코드를 고려하세요.
<code class="go">package main import ( "fmt" "net/http" ) func Extract(url string) ([]string, error) { http.Get(url) var links []string return links, nil } func crawl(url string) []string { list, _ := Extract(url) return list } func main() { var ch = make(chan int) ch <- 1 }</code>
net/http 가져오기 없이 이 코드를 실행하면 "교착 상태" 오류가 발생합니다. 이는 ServeHTTP 또는 Close에 대한 해당 호출 없이 HTTP 요청에서 Extract 함수가 차단되기 때문입니다.
그러나 net/http 패키지를 가져오면 Extract 함수를 호출하지 않아도 "교착 상태" 오류가 발생합니다. 사라집니다. 이는 net 패키지를 가져오면 HTTP 서버와 자동으로 통신하는 백그라운드 폴링 Goroutine이 시작되기 때문입니다.
이 동작은 Go 블로그 게시물 "NetHttp의 Goroutine Pooling"에 설명되어 있습니다:
"The net 패키지는 HTTP 서버에 대한 연결 가능성을 주기적으로 테스트하는 간단한 백그라운드 고루틴을 시작합니다. HTTP 서버에 연결할 수 없으면 종료되고 서버에 연결할 수 있게 되면 다시 시작됩니다. 이렇게 하면 호출에 net.Dial이 포함되어 있는지 확인됩니다. 스택이 차단된 것으로 잘못 보고되지 않습니다."
net 패키지를 가져오면 HTTP 통신을 포함하는 net.Dial을 사용하는 모든 코드에 대한 교착 상태 감지기가 효과적으로 비활성화됩니다.
더 엄격한 요구 사항을 적용하는 애플리케이션의 경우 교착 상태를 감지하려면 HTTP 서버와의 통신을 설정해야 할 때까지 넷 패키지를 가져오지 않는 것이 좋습니다.
위 내용은 Go에서 net/http 패키지를 가져오는 것이 교착 상태 오류 감지에 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!