Rumah > pembangunan bahagian belakang > Golang > go - hanya bersihkan sumber apabila fungsi akan mengembalikan ralat

go - hanya bersihkan sumber apabila fungsi akan mengembalikan ralat

WBOY
Lepaskan: 2024-02-09 11:48:19
ke hadapan
1011 orang telah melayarinya

go - 仅在函数即将返回错误时清理资源

Editor PHP Baicao memperkenalkan anda kepada teknologi untuk membersihkan sumber apabila fungsi akan mengembalikan ralat - "pergi". Teknologi ini boleh membantu pembangun mengendalikan kerja pembersihan sumber dengan lebih elegan semasa menulis kod. Dengan menggunakan "go", pembangun boleh meletakkan logik pembersihan sumber dalam fungsi berasingan melalui pernyataan tangguh sebelum fungsi mengembalikan ralat, dengan itu mengelakkan lebihan dalam kod dan pengendalian ralat yang menyusahkan. Kesederhanaan dan kecekapan teknologi "go" menjadikannya pilihan pertama bagi banyak pembangun PHP. Mari kita lihat prinsip pelaksanaan dan kaedah penggunaannya!

Kandungan soalan

Andaikan saya mempunyai fungsi yang mula-mula mencipta direktori dan kemudian melakukan beberapa lagi operasi seperti ini:

{
    err := os.Mkdir(path, os.ModePerm)
    ...

    err = doSomething()
    if err != nil {
        return nil, err
    }

    err = doSomethingElse()
    if err != nil {
        return nil, err
    }

    return path, nil
}
Salin selepas log masuk

Sekarang saya mahu fungsi memadamkan direktori yang dicipta dalam semua kes apabila ralat berlaku. Apakah cara yang paling bersih?

Salah satu cara adalah dengan memasukkan setiap if 分支中调用 os.removeall ,但这不是一个很好的解决方案。另一种方法是使用 defer pernyataan tetapi juga laksanakan sekiranya tiada kesilapan.

Penyelesaian

Ya, fungsi kelewatan akan sentiasa dilaksanakan, tetapi sama ada ia memadamkan direktori atau tidak terpulang kepada anda sepenuhnya.

Gunakan fungsi kelewatan dan semak ralat. Jika tiada ralat, jangan padam direktori. Untuk melakukan ini, gunakan parameter hasil yang dinamakan, contohnya:

func foo() (result resulttype, err error) {
    path := "some folder"

    defer func() {
        if err != nil { // this is the result err
            if err2 := os.removeall(path); err2 != nil {
                // handle err2
            }
        }
    }()

    err := os.mkdir(path, os.modeperm)
    
    ...
}
Salin selepas log masuk

Sila ambil perhatian bahawa jika terdapat pernyataan return yang jelas, contohnya:

return path, errors.New("bar")
Salin selepas log masuk

Pernyataan return 语句首先将值分配给 resulterr di atas mula-mula memberikan nilai kepada hasil dan err, jadi dalam fungsi tertunda anda boleh mendapatkan/melihat nilai ini.

Lihat kandungan berkaitan: Bagaimana untuk mengembalikan nilai dalam fungsi go yang panik?

Atas ialah kandungan terperinci go - hanya bersihkan sumber apabila fungsi akan mengembalikan ralat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan