Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah `input.Text()` dinilai dalam goroutine utama apabila mencipta goroutine baharu dengan `go`?

Mengapakah `input.Text()` dinilai dalam goroutine utama apabila mencipta goroutine baharu dengan `go`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 13:18:03832semak imbas

Why is `input.Text()` evaluated in the main goroutine when creating a new goroutine with `go`?

Mengapa input.Text() dinilai dalam goroutine utama

Apabila mencipta goroutine baharu dengan kata kunci go, parameter dan argumen fungsi dinilai pada masa itu pernyataan go dilaksanakan, bukan apabila goroutine sebenarnya mula berjalan. Ini bermakna bahawa sebarang pembolehubah atau ungkapan yang digunakan sebagai parameter atau argumen akan dinilai dalam goroutine utama.

Dalam contoh yang disediakan, fungsi handleConn dipanggil sebagai goroutine dengan kata kunci go. Fungsi ini mengambil satu hujah, c, yang merujuk objek net.Conn yang mewakili sambungan rangkaian. Di dalam fungsi handleConn, bufio.Pengimbas dicipta menggunakan sambungan c, dan kaedah Imbasan berulang kali dipanggil pada pengimbas untuk membaca input daripada sambungan.

Dalam gelung, kaedah Imbasan dipanggil pada pengimbas input, dan baris teks yang dibaca daripada sambungan diakses menggunakan kaedah Teks. Ungkapan input.Text() dinilai dalam goroutine utama dan teks dikembalikan kepada handleConn goroutine sebagai hasil daripada kaedah Scan.

Dalam contoh khusus ini, handleConn goroutine berulang kali memanggil go echo( c, input.Text(), 1*time.Second) untuk mencipta goroutine baharu yang menggemakan teks input kembali kepada klien. Oleh kerana input.Text() dinilai dalam goroutine utama, nilai untuk input.Text() dan 1*time.Second ditentukan pada masa pernyataan go dilaksanakan, bukan apabila goroutine gema mula berjalan.

Atas ialah kandungan terperinci Mengapakah `input.Text()` dinilai dalam goroutine utama apabila mencipta goroutine baharu dengan `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