Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Pengendalian Ralat Go Boleh Diperbaiki untuk Kebolehbacaan dan Kesingkatan?

Bagaimanakah Pengendalian Ralat Go Boleh Diperbaiki untuk Kebolehbacaan dan Kesingkatan?

DDD
DDDasal
2024-11-26 05:00:10353semak imbas

How Can Go's Error Handling Be Improved for Readability and Conciseness?

Pengendalian Ralat dalam Go

Pengendalian ralat dalam Go ialah aspek pengaturcaraan yang penting. Bahasa ini menggalakkan pemeriksaan dan pengendalian ralat langsung, yang boleh membawa kepada ralat pengendalian kod bertele-tele secara berulang.

Pertimbangkan contoh rekaan berikut yang menyalurkan "Hello world!" ke dalam cat dan membaca output:

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
}

Contoh ini mempunyai berbilang baris kod pengendalian ralat untuk setiap operasi.

Pendekatan idiomatik dalam Go ialah mengendalikan ralat secara terpusat. Sebagai contoh, kita boleh merangkum operasi paip dalam fungsi tersuai yang menguruskan ralat secara dalaman:

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)
}

Pendekatan ini mengurangkan jumlah kod pengendalian ralat dalam fungsi utama, menjadikannya lebih ringkas dan lebih mudah dibaca .

Atas ialah kandungan terperinci Bagaimanakah Pengendalian Ralat Go Boleh Diperbaiki untuk Kebolehbacaan dan Kesingkatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn