2015-01-03 2 views
2

Reddit JSON을 사용하는 매우 기본적인 파서를 작성했으며 Go에서 오류를 구체적으로 관리 할 수 ​​있는지 궁금합니다. 예를 들어Go에서 특정 오류를 지정하고 처리하는 방법은 무엇입니까?

내가 링크이 "가져 오기"방법이 있습니다

func Get(reddit string) ([]Item, error) { 
    url := fmt.Sprintf("http://reddit.com/r/%s.json", reddit) 
    resp, err := http.Get(url) 
    if err != nil { 
     return nil, err 
    } 
    defer resp.Body.Close() 
    if resp.StatusCode != http.StatusOK { 
     return nil, err 
    } 
    /* 
    * Other code here 
    */ 
} 

가 어떻게 말 처리 할 수 ​​ 의 상태 코드에서 404 오류?

if resp.StatusCode == http.StatusNotfound { 
    //do stuff here 
} 

하지만 직접 if 문의 무리를 작성하지 않고 resp.StatusCode != http.StatusOK을 관리 할 수있는 방법이 : 나는 404 오류 자체를 테스트 할 수 알아? switch 문에 err을 사용할 수있는 방법이 있습니까?

답변

1

먼저 http.Get은 200이 아닌 HTTP 반환에 대해 오류를 반환하지 않습니다. 서버에서 404 오류가 발생해도 Get이 작업을 성공적으로 완료했습니다. 문서에서

2x가 아닌 응답은 오류를 발생시키지 않습니다. 당신은 아마 당신이 원하지 않을 것입니다있는 err=nil를 반환합니다 뜻이를 호출 할 때 코드에서

Therfore을 errnil 될 것입니다.

if resp.StatusCode != http.StatusOK { 
    return nil, err 
} 

이것은 당신이 무엇에 관한 메시지와 함께, HTTP 오류 모든 종류의 오류를 반환합니다

if resp.StatusCode != http.StatusOK { 
    return nil, fmt.Errorf("HTTP Error %d: %s", resp.StatusCode, resp.Status) 
} 

을 원하는 일을해야한다. 당신이 할 수있는

관련 문제