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!