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 중국어 웹사이트의 기타 관련 기사를 참조하세요!