Jadual Kandungan
Kandungan soalan
Penyelesaian
Rumah pembangunan bahagian belakang Golang Output Goroutine tidak betul

Output Goroutine tidak betul

Feb 11, 2024 pm 02:20 PM
pergi bahasa

Goroutine 的输出不正确

Editor PHP Zimo membawakan anda soalan tentang Goroutine hari ini: Mengapakah hasil keluaran Goroutine kadangkala tidak betul? Goroutine ialah utas ringan dalam bahasa Go yang boleh melaksanakan tugas secara serentak, tetapi kadangkala hasil keluarannya mungkin tidak betul. Jadi, apakah punca keadaan ini? Mari kita terokai bersama-sama! Dengan memahami masalah ini, kita boleh lebih memahami cara Goroutine berfungsi dan mengelak daripada menghadapi masalah yang sama dalam pembangunan sebenar.

Kandungan soalan

Saya sedang menonton kuliah di mana penulis membina aplikasi status menggunakan rutin go yang berkelakuan pelik selepas beberapa ketika.

Kod adalah seperti berikut:

65bcd28b0b95

Output yang saya dapat ialah:

65bcd28b0ba0

Saya tidak faham mengapa "amazon.com" terus berulang di sini? Mengapa ini berlaku selepas mencetak kesemua 5 pautan?

Penyelesaian

Masalahnya ialah dengan pembolehubah gelung l 的闭包捕获。由于 goroutine 是在循环内启动的,因此循环创建的所有 goroutine 共享 l 的相同内存地址。当睡眠结束并执行 goroutine 时,由于循环迭代剩余的链接,l 的值已更改。因此,所有 goroutine 最终都会检查 links pautan terakhir dalam kepingan, iaitu "http://amazon.com". Untuk menyelesaikan masalah ini, anda perlu menghantar pembolehubah gelung l sebagai parameter kepada fungsi tanpa nama di dalam goroutine. Berikut ialah versi kod yang dikemas kini:

for l := range c {
    go func(link string) {
        time.Sleep(5 * time.Second)
        checkLink(link, c)
    }(l)
}
Salin selepas log masuk

Dengan menghantar l 作为参数传递给匿名函数,每个 goroutine 将拥有自己的 l sebagai hujah kepada fungsi tanpa nama, setiap goroutine akan mempunyai salinan

sendiri, mengekalkan nilai yang betul untuk setiap lelaran. 🎜

Atas ialah kandungan terperinci Output Goroutine tidak betul. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan refleksi untuk mengakses medan dan kaedah persendirian dalam golang Cara menggunakan refleksi untuk mengakses medan dan kaedah persendirian dalam golang May 03, 2024 pm 12:15 PM

Cara menggunakan refleksi untuk mengakses medan dan kaedah persendirian dalam golang

Petua untuk mencipta fungsi baharu secara dinamik dalam fungsi golang Petua untuk mencipta fungsi baharu secara dinamik dalam fungsi golang Apr 25, 2024 pm 02:39 PM

Petua untuk mencipta fungsi baharu secara dinamik dalam fungsi golang

Perbezaan antara ujian prestasi dan ujian unit dalam bahasa Go Perbezaan antara ujian prestasi dan ujian unit dalam bahasa Go May 08, 2024 pm 03:09 PM

Perbezaan antara ujian prestasi dan ujian unit dalam bahasa Go

Apakah perangkap yang perlu kita perhatikan semasa mereka bentuk sistem teragih dengan teknologi Golang? Apakah perangkap yang perlu kita perhatikan semasa mereka bentuk sistem teragih dengan teknologi Golang? May 07, 2024 pm 12:39 PM

Apakah perangkap yang perlu kita perhatikan semasa mereka bentuk sistem teragih dengan teknologi Golang?

Perpustakaan dan alatan teknologi Golang yang digunakan dalam pembelajaran mesin Perpustakaan dan alatan teknologi Golang yang digunakan dalam pembelajaran mesin May 08, 2024 pm 09:42 PM

Perpustakaan dan alatan teknologi Golang yang digunakan dalam pembelajaran mesin

Evolusi konvensyen penamaan fungsi golang Evolusi konvensyen penamaan fungsi golang May 01, 2024 pm 03:24 PM

Evolusi konvensyen penamaan fungsi golang

Peranan teknologi Golang dalam pembangunan IoT mudah alih Peranan teknologi Golang dalam pembangunan IoT mudah alih May 09, 2024 pm 03:51 PM

Peranan teknologi Golang dalam pembangunan IoT mudah alih

Bolehkah parameter pembolehubah golang digunakan untuk mengembalikan nilai fungsi? Bolehkah parameter pembolehubah golang digunakan untuk mengembalikan nilai fungsi? Apr 29, 2024 am 11:33 AM

Bolehkah parameter pembolehubah golang digunakan untuk mengembalikan nilai fungsi?

See all articles