Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah maksud golang defer?

Apakah maksud golang defer?

PHPz
PHPzasal
2023-04-23 10:10:44583semak imbas

Di Golang, pernyataan penangguhan digunakan untuk menangguhkan pelaksanaan fungsi atau kaedah sehingga fungsi atau blok kaedah semasa dilaksanakan. Ia merupakan binaan bahasa yang sangat berguna yang boleh membantu pengaturcara menyelesaikan operasi penting seperti pelepasan sumber dan pengendalian pengecualian dalam banyak senario.

Pernyataan penangguhan boleh digunakan untuk mengendalikan senario berikut:

1 Keluaran sumber

Apabila memproses sumber seperti fail, sambungan rangkaian, sambungan pangkalan data, dll., kita mesti melepaskannya selepas digunakan Keluarkan dalam masa untuk mengelakkan kebocoran sumber. Pernyataan penangguhan secara automatik boleh melaksanakan logik untuk melepaskan sumber selepas fungsi semasa dilaksanakan, mengurangkan beban pengaturcara. Contohnya:

func readFromFile(filename string) ([]byte, error) {
    f, err := os.Open(filename)
    if err != nil {
        return nil, err
    }

    defer f.Close() // 在函数执行完毕后释放文件资源

    data, err := ioutil.ReadAll(f)
    if err != nil {
        return nil, err
    }

    return data, nil
}

2. Pemulihan pengecualian

Apabila fungsi dilaksanakan, pengecualian mungkin berlaku dan fungsi tidak boleh berakhir seperti biasa. Untuk mengelakkan ranap program yang disebabkan oleh pengecualian, kita boleh menggunakan pernyataan tangguh untuk melaksanakan pengendalian pengecualian yang diperlukan apabila pengecualian berlaku dalam fungsi tersebut. Contohnya:

func doSomething() error {
    tx, err := db.Begin()
    if err != nil {
        return err
    }

    defer func() {
        if p := recover(); p != nil { // 发生异常时处理事务回滚
            tx.Rollback()
            log.Println("panic:", p)
        }
    }()

    // 在函数执行完毕前提交事务
    err = tx.Commit()
    if err != nil {
        return err
    }

    return nil
}

Dalam kod di atas, jika pengecualian berlaku apabila fungsi melakukan transaksi, penyata penangguhan akan menangkap pengecualian dan melakukan operasi rollback transaksi untuk memastikan konsistensi data.

3. Analisis Prestasi

Analisis prestasi semasa program berjalan sangat berguna. Masa pelaksanaan fungsi boleh dikira dengan mencetak cap masa pada permulaan dan akhir fungsi. Contohnya:

func myFunc() {
    defer func() {
        log.Printf("myFunc took %v", time.Since(start))
    }()

    start := time.Now()

    // 函数的具体实现

    return
}

Dalam kod di atas, titik masa semasa direkodkan apabila fungsi bermula, dan perbezaan masa dikira apabila fungsi tamat untuk mengira masa pelaksanaan fungsi.

Ringkasnya, pernyataan tangguh ialah binaan bahasa yang sangat praktikal di Golang, yang boleh membantu pengaturcara memudahkan pelaksanaan kod dan mengendalikan beberapa senario biasa. Perlu diingat bahawa apabila menggunakan pernyataan penangguhan, operasi seperti pengecualian dan keluaran sumber mesti dikendalikan dengan berhati-hati untuk memastikan kebolehpercayaan dan ketekalan kod.

Atas ialah kandungan terperinci Apakah maksud golang defer?. 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