최근 프로젝트에서 golang을 사용하여 인터페이스를 디버깅할 때 일정 시간이 지나면 인터페이스가 자동으로 닫히는 이상한 문제가 발생했습니다. 디버깅을 계속하려면 인터페이스를 계속 다시 시작해야 하기 때문에 많은 불편을 초래합니다. 이 기사에서는 내 솔루션을 공유하겠습니다.
먼저 golang의 표준 라이브러리에 있는 http 패키지를 추적해 보니 본질적으로 http.Server 유형이 모든 HTTP 서버의 기본이라는 것을 알게 되었습니다. 나는 이 유형을 사용하여 HTTP 서버를 시작하려고 시도했고 깊은 디버깅 이해를 통해 문제를 해결했습니다. 그 과정에서 흥미로운 사실을 발견했습니다.
http.Server는 요청 처리를 시작하기 전에 net.Listen을 사용하여 HTTP 수신기에 대한 참조를 저장합니다. 그런 다음 HTTP 수신기를 인스턴스화하여 새 HTTP 요청 수락을 시작할 수 있습니다. 이는 다음과 같습니다:
l, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatal(err)
}
s := &http.Server{}
// 요청 처리 시작
s.Serve(l)
이 사실을 알고 나서 일부 타사 라이브러리를 찾아 코드 구현을 확인했습니다. 우리는 Gorilla Mux와 같은 일부 라이브러리를 사용하여 위의 방법을 사용하여 HTTP 서비스를 생성하지 않고 다음과 같이 http.ListenAndServe 함수를 사용한다는 것을 발견했습니다(많은 사람들이 사용하는 방식이라고 생각합니다).
http.ListenAndServe (" :8080", nil)
두 번째 매개변수는 우리가 작성한 경로 핸들러 함수(또는 핸들러 인터페이스를 구현하는 다른 유형)입니다.
http.ListenAndServe는 net.Listen을 통해 HTTP 리스너를 초기화하고 http.Server.Serve를 사용하여 시작하는 방법과 유사하게 작동합니다. 그러나 더 간단하고 한 번에 완료할 수 있습니다.
이것을 교체하자 모든 것이 잘 작동하기 시작했습니다. 인터페이스는 자동으로 닫히지 않으며 항상 포트에서 수신 대기하므로 코드에 중단점을 설정하고 인터페이스를 다시 로드하거나 액세스할 수 있습니다. 실제로 일반적인 HTTP 서버 시작 방법으로는 http.ListenAndServe를 사용해야 한다고 생각합니다.
요약하자면, golang을 사용할 때 이 인터페이스가 자동으로 종료되는 문제가 발생하면 http.ListenAndServe 함수를 사용하여 HTTP 서버를 시작하는 것이 효과적인 해결책일 수 있습니다. Golang 표준 라이브러리와 타사 라이브러리에 대한 심층적인 이해를 통해 Golang의 작동 방식을 더 잘 이해하는 데 도움이 되기를 바랍니다.
위 내용은 golang 디버깅 인터페이스가 닫혔습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!