2013-06-02 8 views
2

이동의 기본 HTTP 서버 구현은 HTTP는 "청소"경로에 따라 재 복귀, HTTP 요청에 슬래시를 병합 : 당신이 HTTP 요청을한다면재정의 이동의 기본 HTTP 끊어 재 행동

https://code.google.com/p/go/source/browse/src/pkg/net/http/server.go#1420

GET /http://foo.com/ 서버는 301 Moved Permanently ... Location: /http:/foo.com/으로 응답합니다.

이 동작을 사용하지 않고 모든 경로를 직접 처리하고 싶습니다.

저는 초보자입니다. 내 자신의 Server 인스턴스를 만들고 Handler 속성을 덮어 쓸 수있는 것처럼 보입니다. 그러나 어떻게해야할지 모르겠습니다.

답변

7

이 동작을 비활성화하고 모든 경로를 직접 처리하고 싶습니다.

저는 초보자입니다. 마치 내 자신의 서버 인스턴스를 만들고 처리기 속성을 무시할 수있는 것처럼 보입니다. 그러나 어떻게 해야할지 잘 모르겠습니다. 대신 단지 호출 http.Handle 또는 http.HandleFunc 방법을 통해 http.DefaultServeMux 가진 핸들러를 등록

:

MyHandlerhttp.Handler 인터페이스를 구현하는 유형의 인스턴스이다
http.ListenAndServe(":8080", MyHandler) 

.

func ListenAndServe(addr string, handler http.Handler) error { 
    server := &http.Server{Addr: addr, Handler: handler} 
    return server.ListenAndServe() 
} 

그래서 대신뿐만 아니라 직접 그렇게 할 수 있습니다 : 차례로

http.ListenAndServe는 다음을 수행 짧은 손 방법이다. 당신은 다음 구문 분석 할 수 처리기/경로 내부

URI를하지만이 같은 바랍니다 :

func (h *MyHandlerType) ServeHTTP(w http.ResponseWriter, r *http.Request) { 
    uri := r.URL.Path 
    // ...use uri... 
} 
+0

와우, 정말 쉽게 밝혀졌다 그 - 나는 인터페이스 및 유형에 독서 좀 더 많은 시간을 보낼거야 ! 다음은 내가 결국 구현 한 것입니다 : https://gist.github.com/johnboxall/5698940 –

+0

@jb. 당신은 빈 구조체를 필요로하지 않습니다. closure는 https://gist.github.com/tsenart/5fc18c659814c078378d를 할 것입니다. –