올바른 처리 방법:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!