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
Lepaskan: 2024-12-02 18:55:11
asal
691 orang telah melayarinya

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()
Salin selepas log masuk

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

defer f()()
Salin selepas log masuk

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)
Salin selepas log masuk

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

defer func() { fmt.Println(i) }()
Salin selepas log masuk

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan