>  기사  >  백엔드 개발  >  golang 함수 오류 처리 모범 사례

golang 함수 오류 처리 모범 사례

PHPz
PHPz원래의
2024-05-03 22:21:021027검색

모범 사례: 오류가 감지되지 않더라도 호출자가 응답할 수 있도록 항상 오류를 반환합니다. Sentinel 오류 값을 사용하여 특정 오류 유형을 표현하고 가독성을 높입니다. 더 쉬운 디버깅을 위해 래핑된 오류를 사용하여 원래 오류 메시지를 향상시킵니다. 패닉이나 오류가 발생하더라도 리소스가 해제되도록 하려면 defer를 사용하세요. 실제 사례: CalculateAverage 함수는 평균값 또는 오류를 반환합니다. 배열이 비어 있으면 ErrNoNumbers 오류가 반환됩니다. 배열에 음수가 포함되어 있으면 형식이 지정된 오류가 반환됩니다. 그렇지 않으면 평균값이 반환됩니다.

golang 함수 오류 처리 모범 사례

Golang 함수 오류 처리 모범 사례

Go 언어에서 오류 처리는 오류를 우아하게 처리하고 예상치 못한 동작을 방지하는 데 도움이 되는 중요한 작업입니다. 다음은 함수 오류 처리에 대한 몇 가지 모범 사례입니다.

1. 항상 오류를 반환합니다.

함수는 오류를 감지하지 못하더라도 항상 오류를 반환해야 합니다. 이를 통해 발신자는 실제 상황에 따라 응답할 수 있습니다. 예:

func ParseJSON(input []byte) (map[string]interface{}, error) {
  var data map[string]interface{}

  if err := json.Unmarshal(input, &data); err != nil {
    return nil, err
  }

  return data, nil
}

2. Sentinel 오류 값 사용 ​​

Sentinel 오류 값은 특정 유형의 오류를 나타내는 데 사용할 수 있는 특수 값입니다. 이렇게 하면 오류 처리를 더욱 간결하고 읽기 쉽게 만들 수 있습니다. 예:

var ErrInputTooLong = errors.New("input is too long")

3. 래핑된 오류 사용

래핑된 오류를 사용하면 추가 상황 정보를 추가하여 원래 오류 메시지를 향상시킬 수 있습니다. 이는 오류의 근본 원인을 디버깅하고 이해하는 데 도움이 될 수 있습니다. 예:

func OpenFile(path string) (*os.File, error) {
  file, err := os.Open(path)
  if err != nil {
    return nil, fmt.Errorf("failed to open file %s: %w", path, err)
  }

  return file, nil
}

4. defer

defer 문을 사용하면 패닉이나 오류가 발생한 경우에도 리소스가 해제되도록 할 수 있습니다. 이는 파일 닫기, 메모리 해제 등과 같은 상황에 매우 중요합니다. 예:

file, err := os.Open("data.txt")
if err != nil {
  return nil, err
}
defer file.Close()

실용적인 예:

다음 모범 사례를 사용한 실제 예를 살펴보겠습니다.

func CalculateAverage(numbers []int) (float64, error) {
  if len(numbers) == 0 {
    return 0, ErrNoNumbers
  }

  sum := 0
  for _, number := range numbers {
    if number < 0 {
      return 0, fmt.Errorf("invalid number %d: must be non-negative", number)
    }

    sum += number
  }

  return float64(sum) / float64(len(numbers)), nil
}

// 主函数
func main() {
  numbers := []int{1, 2, 3, 4, 5}

  average, err := CalculateAverage(numbers)
  if err != nil {
    fmt.Println("Error:", err)
  } else {
    fmt.Println("Average:", average)
  }
}

이러한 모범 사례를 따르면 함수 오류 처리가 강력하고 유지 관리 가능하다는 것을 확인할 수 있습니다.

위 내용은 golang 함수 오류 처리 모범 사례의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.