golang이 오류를 반환할 때 올바르게 처리하는 방법

王林
풀어 주다: 2019-12-24 15:40:33
원래의
3727명이 탐색했습니다.

golang이 오류를 반환할 때 올바르게 처리하는 방법

올바른 처리 방법:

1. 실패 이유가 하나뿐인 경우 error

를 사용하지 마세요. 예:

func (self *AgentContext) CheckHostType(host_type string) error {
    switch host_type {
    case "virtual_machine":        
                return nil
    case "bare_metal":    
            return nil
    }
    return errors.New("CheckHostType ERROR:" + host_type)
}
로그인 후 복사

이 함수의 실패 이유는 하나뿐임을 알 수 있습니다. 따라서 반환 값의 유형은 오류 대신 bool에 대한 코드를 리팩터링해야 합니다.

func (self *AgentContext) IsValidHostType(hostType string) bool {
    return hostType == "virtual_machine" || hostType == "bare_metal"}
로그인 후 복사

참고: 대부분의 경우 실패 이유는 두 가지 이상이며, 특히 I/O 작업의 경우 사용자는 더 많은 오류를 알아야 합니다. 이때 반환값 유형은 더 이상 단순한 bool이 아닌 error입니다.

2. 실패가 없을 때 오류를 사용하지 마세요

Error는 Golang에서 인기가 많아서 실패 이유가 없더라도 함수를 설계할 때와 상관없이 많은 사람들이 오류를 사용합니다.

샘플 코드를 살펴보겠습니다.

func (self *CniParam) setTenantId() error {
    self.TenantId = self.PodNs    
    return nil}
로그인 후 복사

위의 함수 설계에는 다음과 같은 호출 코드가 있습니다.

err := self.setTenantId()
if err != nil {
    // log
    // free resource
    return errors.New(...)
}
로그인 후 복사

우리의 올바른 자세에 따라 코드를 재구성합니다.

func (self *CniParam) setTenantId() {
    self.TenantId = self.PodNs
}
로그인 후 복사

그러면 호출 코드는 다음과 같습니다.

self.setTenantId()
로그인 후 복사

3. 오류는 반환 값 유형 목록의 끝에 배치되어야 합니다.

반환 값 유형 오류의 경우 오류 정보를 전달하는 데 사용되며 일반적으로 Golang에서 마지막에 배치됩니다.

resp, err := http.Get(url)
if err != nil {    
    return nill, err
}
로그인 후 복사

bool은 반환 값 유형과 동일합니다.

value, ok := cache.Lookup(key) 
if !ok {    
// ...cache[key] does not exist… 
}
로그인 후 복사

4. 레이어별로 오류가 전달되면 각 레이어에 로그가 추가됩니다.

각 레이어에 로그를 추가하면 오류 위치 파악에 매우 편리합니다.

추천 관련 기사 및 튜토리얼: golang 튜토리얼

위 내용은 golang이 오류를 반환할 때 올바르게 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿