> 백엔드 개발 > Golang > Go에서 여러 오류를 효율적으로 처리하려면 어떻게 해야 합니까?

Go에서 여러 오류를 효율적으로 처리하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2024-11-30 07:22:11
원래의
676명이 탐색했습니다.

How Can I Efficiently Handle Multiple Errors in Go?

Go에서 여러 오류 처리

Go에서 오류 처리는 오류가 발생한 위치를 명시적으로 검사하는 것을 강조합니다. 그러나 이로 인해 단일 블록에서 여러 오류를 처리할 때 코드가 장황해질 수 있습니다.

다음과 같은 인위적인 예를 고려해보세요.

package main

import (
    "fmt"
    "io"
    "io/ioutil"
    "os/exec"
)

func main() {
    cmd := exec.Command("cat", "-")
    stdin, err := cmd.StdinPipe()
    if err != nil {
        return
    }
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        return
    }
    err = cmd.Start()
    if err != nil {
        return
    }
    _, err = io.WriteString(stdin, "Hello world!")
    if err != nil {
        return
    }
    err = stdin.Close()
    if err != nil {
        return
    }
    output, err := ioutil.ReadAll(stdout)
    if err != nil {
        return
    }
    fmt.Println(string(output))
    return
}
로그인 후 복사

오류를 처리하는 각 줄에는 코드 세 줄이 추가됩니다. 이러한 오류 중 다수는 치명적이지 않거나 다른 곳에서 처리되지 않으므로 상용구의 증가로 이어집니다.

관용적인 오류 처리

한 가지 관용적인 접근 방식은 함수에서 오류를 반환하고 호출 코드에서 명시적으로 처리합니다.

package main

import (
    "fmt"
    "os"

    "errors"
)

func piping(input string) (string, error) {
    cmd := exec.Command("cat", "-")
    stdin, err := cmd.StdinPipe()
    if err != nil {
        return "", err
    }
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        return "", err
    }
    if err = cmd.Start(); err != nil {
        return "", err
    }
    if _, err = io.WriteString(stdin, input); err != nil {
        return "", err
    }
    if err = stdin.Close(); err != nil {
        return "", err
    }
    all, err := ioutil.ReadAll(stdout)
    if err != nil {
        return "", err
    }
    return string(all), nil
}

func main() {
    in := "Hello world!"
    fmt.Println(in)
    out, err := piping(in)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    fmt.Println(out)
}
로그인 후 복사

이 예에서 piping()은 출력과 오류를 모두 반환합니다. 마주쳤다. 그런 다음 호출 코드는 오류를 처리하거나 필요한 경우 오류를 전파할 수 있습니다.

Go에서의 오류 처리

Go에서는 명시적인 오류 처리가 필수적입니다. 명시적인 if err != nil 검사는 프로그래머가 오류를 즉시 처리하도록 장려하여 예기치 않은 프로그램 동작으로 이어질 수 있는 처리되지 않은 오류를 방지합니다.

이 접근 방식은 어떤 경우에는 장황한 코드로 이어질 수 있지만, 규칙적인 접근 방식을 장려합니다. 오류 처리 및 유지 관리가 용이합니다.

위 내용은 Go에서 여러 오류를 효율적으로 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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