golang 함수의 오류 처리 모범 사례

王林
풀어 주다: 2024-04-24 17:24:01
원래의
654명이 탐색했습니다.

Go의 오류 처리 모범 사례에는 오류 유형 사용, 항상 오류 반환, 오류 확인, 다중 값 반환 사용, 센티널 오류 사용 및 오류 래퍼 사용이 포함됩니다. 실제 예: HTTP 요청 핸들러에서 ReadDataFromDatabase가 오류를 반환하면 500 오류 응답을 반환합니다.

golang 함수의 오류 처리 모범 사례

Go 함수의 오류 처리 모범 사례

Go에서 오류 처리는 강력하고 안정적인 애플리케이션을 구축하는 데 매우 중요합니다. 다음은 오류를 효율적으로 처리하는 데 도움이 되는 몇 가지 모범 사례입니다.

error 유형을 사용하세요. error 类型

Go 提供了一种内置的 error 类型,用于表示错误。它是一个接口,任何类型都可以实现该接口,从而允许你创建自定义错误类型。

package errors

type MyError struct {
    msg string
}

func (e MyError) Error() string {
    return e.msg
}
로그인 후 복사

返回错误

始终返回错误,即使函数的名称不表示该函数可能失败。这将使调用者能够判断函数是否成功执行。

func ReadFile(filename string) (string, error) {
    data, err := ioutil.ReadFile(filename)
    return data, err
}
로그인 후 복사

检查错误

使用 if err != nil 语句检查错误。如果发生了错误,请采取适当的措施,例如记录错误或返回错误给调用者。

func main() {
    data, err := ReadFile("data.txt")
    if err != nil {
        log.Fatal(err)
    }
}
로그인 후 복사

使用多值返回

如果你需要为可能失败的操作返回多个值,可以使用多值返回。第一个返回的值是实际结果,第二个返回的值是错误。

func Divide(a, b int) (float64, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return float64(a) / float64(b), nil
}
로그인 후 복사

使用 sentinel 错误

sentinel 错误是预定义的错误值,用于表示特定类型失败。这可以帮助你轻松地检查和处理这些类型的错误。

var ErrNotFound = errors.New("not found")
로그인 후 복사

使用错误包裹

当你需要包装一个错误以提供其他上下文时,使用 fmt.Errorferrors.Wrap

Go는 오류 표시에 대해 내장된 error 유형을 제공합니다. 이는 모든 유형이 구현할 수 있는 인터페이스이므로 사용자 정의 오류 유형을 만들 수 있습니다.

func ReadFileFromRemote(filename string) (string, error) {
    data, err := ReadFileFromCache(filename)
    if err != nil {
        return "", fmt.Errorf("failed to read from cache: %w", err)
    }
    return data, nil
}
로그인 후 복사

오류 반환

함수 이름이 함수가 실패할 수 있음을 나타내지 않더라도 항상 오류를 반환합니다. 이를 통해 호출자는 함수가 성공적으로 실행되었는지 확인할 수 있습니다.

package main

import (
    "fmt"
    "net/http"
)

// 处理传入的 HTTP 请求
func handler(w http.ResponseWriter, r *http.Request) {
    data, err := ReadDataFromDatabase(r)
    if err != nil {
        // 返回一个带有 500 错误代码的错误响应
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    // 处理成功请求并返回响应
}
로그인 후 복사
🎜🎜오류 확인🎜🎜🎜if err != nil 문을 사용하여 오류를 확인하세요. 오류가 발생하면 오류를 기록하거나 호출자에게 오류를 반환하는 등 적절한 조치를 취하십시오. 🎜rrreee🎜🎜다중 값 반환 사용🎜🎜🎜실패할 수 있는 작업에 대해 여러 값을 반환해야 하는 경우 다중 값 반환을 사용할 수 있습니다. 반환된 첫 번째 값은 실제 결과이고 두 번째 반환된 값은 오류입니다. 🎜rrreee🎜🎜센티넬 오류 사용 🎜🎜🎜센티넬 오류는 특정 유형의 실패를 나타내는 데 사용되는 사전 정의된 오류 값입니다. 이를 통해 이러한 유형의 오류를 쉽게 감지하고 처리할 수 있습니다. 🎜rrreee🎜🎜오류 래핑 사용🎜🎜🎜추가 컨텍스트를 제공하기 위해 오류를 래핑해야 하는 경우 fmt.Errorf 또는 errors.Wrap 함수를 사용하세요. 이를 통해 보다 설명적이고 이해하기 쉬운 오류 메시지를 만들 수 있습니다. 🎜rrreee🎜🎜실용적인 예: HTTP 요청의 오류 처리🎜🎜🎜다음은 HTTP 요청 처리기에서 이러한 모범 사례를 사용하는 방법을 보여주는 예입니다. 🎜rrreee🎜이러한 모범 사례를 따르면 강력하고 안정적인 Go 코드를 작성할 수 있습니다. 오류를 효율적으로 처리하고 보고하여 애플리케이션 안정성과 사용자 경험을 향상시킵니다. 🎜

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

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