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中文網其他相關文章!