Rumah >pembangunan bahagian belakang >Golang >Mengapa Gunakan '( )' Badan Selepas Penutupan dalam Penyata `tunda` Go?

Mengapa Gunakan '( )' Badan Selepas Penutupan dalam Penyata `tunda` Go?

Barbara Streisand
Barbara Streisandasal
2024-12-02 18:55:11697semak imbas

Why Use

Rasional Di Sebalik "( )" dalam Badan Penutupan dalam Go

In Go, penambahan "( )" selepas badan penutup tidak khusus untuk penutupan tetapi terpakai pada sebarang panggilan fungsi dalam kenyataan penangguhan. Spesifikasi bahasa memberi mandat bahawa ungkapan dalam pernyataan tangguh mestilah sentiasa panggilan fungsi.

Pertimbangkan contoh:

defer f()

Ungkapan ini cuba menangguhkan pelaksanaan fungsi f itu sendiri, yang tidak masuk akal. Sebaliknya, sintaks yang betul ialah:

defer f()()

Ini membina penutupan yang menangkap konteks semasa dan melaksanakan fungsi f apabila pernyataan tangguh diaktifkan. Tanda kurung luar melaksanakan penutupan serta-merta, memastikan bahawa panggilan fungsi berlaku selepas pernyataan tangguh dilaksanakan.

Sintaks ini konsisten dengan penggunaan umum panggilan fungsi dalam Go, yang sentiasa memerlukan kurungan untuk melaksanakannya. Sebagai contoh, untuk mencetak nilai i pada masa penutupan ditakrifkan, gunakan sintaks berikut:

defer func(n int) { fmt.Println(n) }(i)

Sebaliknya, untuk mencetak nilai i pada masa penutupan dilaksanakan, gunakan:

defer func() { fmt.Println(i) }()

Memahami prinsip ini membolehkan pemahaman yang jelas tentang kelakuan penyataan penangguhan dalam Go dan penggunaan "( )" yang betul dalam badan penutup dan seterusnya.

Atas ialah kandungan terperinci Mengapa Gunakan '( )' Badan Selepas Penutupan dalam Penyata `tunda` Go?. 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