Go 中的错误处理
Go 中的错误处理是编程的一个重要方面。该语言鼓励直接错误检查和处理,这可能会导致重复出现冗长的代码处理错误。
考虑以下人为的示例,该示例通过管道传输“Hello world!”进入 cat 并读取输出:
package main import "fmt" import "io" import "io/ioutil" import "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 }
这个示例对于每个操作都有多行错误处理代码。
Go 中惯用的方法是以集中的方式处理错误。例如,我们可以将管道操作封装在一个内部管理错误的自定义函数中:
package main import ( "fmt" "io" "io/ioutil" "os" "os/exec" ) 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 } err = cmd.Start() if err != nil { return "", err } _, err = io.WriteString(stdin, input) if err != nil { return "", err } err = stdin.Close() if err != nil { return "", err } all, err := ioutil.ReadAll(stdout) output := string(all) if err != nil { return output, err } return output, 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) }
这种方法减少了主函数中错误处理代码的数量,使其更简洁,更易于阅读.
以上是如何改进 Go 的错误处理以提高可读性和简洁性?的详细内容。更多信息请关注PHP中文网其他相关文章!