당신은 당신이 정확한 포트를 지정하지 않을 그러나 당신이 시스템에 의해 선택 무료로 사용 가능한 포트 원하는 나타 내기 위해 포트 0
을 사용할 수 있습니다 :
http.ListenAndServe(":0", nil)
을
문제는 할당 된 포트를 찾을 수 없다는 것입니다. 당신이 볼 수 있듯이
Using port: 42039
, 당신은 할당 된 포트에 액세스 할 수 있습니다
listener, err := net.Listen("tcp", ":0")
if err != nil {
panic(err)
}
fmt.Println("Using port:", listener.Addr().(*net.TCPAddr).Port)
panic(http.Serve(listener, nil))
예 출력 : 그래서 당신은 http.Serve()
에 전달할 수동으로 net.Listener
자신합니다 (net.Listen()
기능을 사용)를 작성하고, 필요 net.Listener
, 그 net.Addr
주소 (해당 Addr()
메서드에 의해 획득 됨). net.Addr
직접 포트에 대한 액세스를 제공하지 않지만, 우리는 net.Listener
가 tcp
네트워크 스트림을 이용하여 생성되므로, net.Addr
는 구조체이며 필드 Port int
을 갖는다 (우리는 type assertion으로 획득 할 수있다) 동적 유형 *net.TCPAddr
,이 될 것이다.
응용 프로그램에서 포트가 필요하지 않은 경우 (예 : 직접 표시하려는 경우) 형식 어설 션이 필요하지 않은 경우 listener.Addr()
(포트 번호 포함)을 인쇄 할 수 있습니다 말) :
fmt.Println("Address:", listener.Addr())
예 출력 :
Address: [::]:42039
또한이 경우 (http.ListenAndServe()
) 반환 오류를 처리하는 것을 잊지 마세요. 나의 예에서는 모든 것이 잘되면 http.LitenAndServe()
과 http.Serve()
블록을 차단하기 때문에 단순히 panic()
으로 전달했습니다. 따라서 오류가있는 경우에만 반환됩니다. 이는 panic()
으로 전달됩니다.
매우 잘 설명해 주셔서 감사합니다. –