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!
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 }
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.
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) ... }
Sila ambil perhatian bahawa jika terdapat pernyataan return
yang jelas, contohnya:
return path, errors.New("bar")
Pernyataan return
语句首先将值分配给 result
和 err
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!