2014-05-12 2 views
2

http.ResponseWriter에 쓰려면 json.Encoder을 사용하고 싶습니다.http.ResponseWriter에서 io.Writer를 얻을 수 있습니까?

http.ResponseWriter 님의 고유 주소 io.Writer은 어디에서 얻을 수 있습니까?

아이디어 (io.Writerjson.NewEncoder에 대한 매개 변수로 필요)?

+3

"트릭은"종류도 명시 적으로 인터페이스를 구현하는데 필요한도 어떻게 든 그것을 사용하는 특정 유형의 인스턴스에서 인터페이스를 "추출"해야 할 점이다. 대신 규칙은 간단합니다. 코드의 일부 비트가 특정 인터페이스를 구현할 것으로 예상되는 곳에 유형이 필요한 인터페이스 *의 모든 메소드를 구현하는 모든 * 값을 전달하면 모든 것이 자동으로 수행됩니다. – kostix

답변

7

http.ResponseWriterWrite([]byte) (int, error)을 구현합니다. 따라서 io.Writer이 필요한 모든 곳에서 사용할 수 있습니다.

func handler(w http.ResponseWriter, r *http.Request) { 
    encoder := json.NewEncoder(w) 
} 

Here 당신은 이동 객체의 동작을 지정하는 방법으로 인터페이스를 사용하는 방법에 대한 몇 가지 배경 정보를 찾을 수 있습니다. 이동 인터페이스

+0

이렇게하면 HTTP 상태 코드를 200 개 이상 전송할 수있는 능력이 느슨해집니다. 따라서 인코딩 오류가 발생하더라도 400 또는 500 코드를 작성할 수 없습니다. WriteHeader가 명시 적으로 호출되지 않으면 Write에 대한 첫 번째 호출은 암시 적 WriteHeader (http.StatusOK)를 트리거하기 때문입니다 .'' – themihai

관련 문제