cari
Rumahpembangunan bahagian belakangGolangMudah dan praktikal: Berkongsi contoh aplikasi Go WaitGroup

Mudah dan praktikal: Berkongsi contoh aplikasi Go WaitGroup

Sep 28, 2023 am 08:23 AM
Contoh aplikasikongsigo waitgroup

简单实用:Go WaitGroup的应用实例分享

Mudah dan praktikal: Berkongsi contoh aplikasi Go WaitGroup

Pengenalan:
Bahasa Go ialah bahasa pengaturcaraan serentak dengan banyak alatan dan ciri terbina dalam untuk pemprosesan serentak. Salah satu daripadanya ialah sync.WaitGroup, yang menyediakan cara yang elegan dan mudah untuk menunggu selesainya kumpulan tugasan serentak. Artikel ini akan berkongsi contoh aplikasi khusus, menunjukkan cara menggunakan WaitGroup untuk mempercepatkan pelaksanaan tugas serentak. sync.WaitGroup,它提供了一种优雅且简单的方式来等待一组并发任务的完成。本文将分享一个具体的应用实例,展示了如何使用WaitGroup来加速并发任务的执行。

什么是WaitGroup?
sync.WaitGroup是Go语言标准库中的一个结构体,用于等待一组并发任务的完成。它内部维护了一个计数器,可以增加和减少计数器的值。当计数器的值变为0时,表示所有任务已经完成,WaitGroup内部的阻塞操作将解除。

应用实例:
假设我们有一个需求,需要从多个网页上爬取数据,并且要同时进行,以加快数据的获取速度。我们可以使用WaitGroup来并发地执行这些爬虫任务。下面是一个示例代码:

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "sync"
)

func crawl(url string, wg *sync.WaitGroup) {
    defer wg.Done()

    resp, err := http.Get(url)
    if err != nil {
        fmt.Printf("发生错误:%s
", err)
        return
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Printf("发生错误:%s
", err)
        return
    }

    fmt.Printf("爬取完成:%s
", url)
    // TODO: 处理网页内容
}

func main() {
    urls := []string{
        "https://www.example.com",
        "https://www.google.com",
        "https://www.microsoft.com",
    }

    var wg sync.WaitGroup
    for _, url := range urls {
        wg.Add(1)
        go crawl(url, &wg)
    }

    wg.Wait()
    fmt.Println("所有任务已完成")
}

在上面的代码中,我们定义了一个crawl函数来执行单个爬虫任务。crawl函数接受一个URL和一个WaitGroup指针作为参数。在函数内部,我们使用http.Get发送HTTP请求,然后读取响应的内容。当任务完成后,我们调用wg.Done()来减少WaitGroup的计数器。

main函数中,我们定义了一个URL列表,并使用WaitGroup来处理每个URL对应的爬虫任务。在遍历URL列表时,我们使用wg.Add(1)来增加WaitGroup的计数器,并使用go关键字创建一个新的goroutine来并发地执行任务。

最后,我们调用wg.Wait()来等待所有任务的完成。一旦所有的任务都完成,程序将继续执行后面的代码。

总结:
通过这个应用实例,我们看到了sync.WaitGroup在并发编程中的作用。它简化了协调和控制并发任务的过程,使得并发编程变得简单且易于理解。同时,我们还应该注意到,为了确保并发任务的安全性,我们需要对共享资源进行适当的互斥保护。

希望以上的实例能够帮助读者更好地理解和使用sync.WaitGroup

Apakah WaitGroup? 🎜sync.WaitGroup ialah struktur dalam pustaka standard bahasa Go, digunakan untuk menunggu selesainya kumpulan tugasan serentak. Ia mengekalkan kaunter secara dalaman dan boleh menambah dan mengurangkan nilai kaunter. Apabila nilai pembilang menjadi 0, ini bermakna semua tugasan telah selesai dan operasi menyekat di dalam WaitGroup akan dikeluarkan. 🎜🎜Contoh aplikasi: 🎜 Katakan kita mempunyai keperluan untuk merangkak data daripada berbilang halaman web dan melakukannya serentak untuk mempercepatkan pemerolehan data. Kami boleh menggunakan WaitGroup untuk melaksanakan tugas perangkak ini secara serentak. Berikut ialah contoh kod: 🎜rrreee🎜Dalam kod di atas, kami mentakrifkan fungsi crawl untuk melaksanakan satu tugas perangkak. Fungsi crawl menerima URL dan penunjuk WaitGroup sebagai parameter. Di dalam fungsi, kami menggunakan http.Get untuk menghantar permintaan HTTP dan kemudian membaca kandungan respons. Apabila tugasan selesai, kami memanggil wg.Done() untuk mengurangkan kaunter WaitGroup. 🎜🎜Dalam fungsi utama, kami mentakrifkan senarai URL dan menggunakan WaitGroup untuk memproses tugas perangkak yang sepadan dengan setiap URL. Apabila melelakan senarai URL, kami menggunakan wg.Add(1) untuk menambah pembilang WaitGroup dan mencipta yang baharu menggunakan go kata kunci goroutine untuk melaksanakan tugas secara serentak. 🎜🎜Akhir sekali, kami memanggil wg.Wait() untuk menunggu semua tugasan selesai. Setelah semua tugas selesai, program akan terus melaksanakan kod berikut. 🎜🎜Ringkasan: 🎜Melalui contoh aplikasi ini, kami telah melihat peranan sync.WaitGroup dalam pengaturcaraan serentak. Ia memudahkan proses menyelaras dan mengawal tugas serentak, menjadikan pengaturcaraan serentak mudah dan mudah difahami. Pada masa yang sama, kita juga harus ambil perhatian bahawa untuk memastikan keselamatan tugas serentak, kita perlu menyediakan perlindungan pengecualian bersama yang sesuai untuk sumber yang dikongsi. 🎜🎜Semoga contoh di atas dapat membantu pembaca memahami dengan lebih baik dan menggunakan sync.WaitGroup untuk mempercepatkan pelaksanaan tugasan serentak. 🎜

Atas ialah kandungan terperinci Mudah dan praktikal: Berkongsi contoh aplikasi Go WaitGroup. 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
Membina sistem berskala dengan bahasa pengaturcaraan GoMembina sistem berskala dengan bahasa pengaturcaraan GoApr 25, 2025 am 12:19 AM

Goisidealforbuildingscalablesystemsduetoitssimplicity, ecurciency, dan barangan-inconcurrencysupport.1) go'ScleansyntaxandminimalisticdesignenhanceProductivityandreduceerrors.2)

Amalan terbaik untuk menggunakan fungsi init dengan berkesan di GOAmalan terbaik untuk menggunakan fungsi init dengan berkesan di GOApr 25, 2025 am 12:18 AM

InitFunctionsingorunautomaticallybeforemain () andareuseforforsettingupenvironmentsandinitializingvariables.usethemforsimpletasks, mengelakkansidefefects, andbecautiouswithtestingandloggingtomaintaincodeclarityAndestability.

Perintah pelaksanaan fungsi init dalam pakej GoPerintah pelaksanaan fungsi init dalam pakej GoApr 25, 2025 am 12:14 AM

GoinitializespackagesintheordertheyareImported, thenexecutesinitfunctionswithinapackageintheirdefinitionorder, danfilenamesdeterminetheorderacrossmultiplefiles

Menentukan dan menggunakan antara muka tersuai di GOMenentukan dan menggunakan antara muka tersuai di GOApr 25, 2025 am 12:09 AM

CustomInterfacesingoarecrucialForWritingFlexible, diselenggara, danTestableCode.theYenabledEveloperStofocusonbehavioroverImplementation, enhancingmodularityandrobustness.bydefiningmethodsignaturesthattypesmustimplement, interfacesallowforcorcodforcodforcodforcodforcodforcodforcodforcodeShorcodeShorcodforcodforcodeShorcodeShorcodeShorcodeShorcodeShorcodeAdeShorcodeShorcodeSoUsVorcoShorcodeS

Menggunakan antara muka untuk mengejek dan menguji di GOMenggunakan antara muka untuk mengejek dan menguji di GOApr 25, 2025 am 12:07 AM

Alasan untuk menggunakan antara muka untuk simulasi dan ujian adalah bahawa antara muka membolehkan definisi kontrak tanpa menentukan pelaksanaan, menjadikan ujian lebih terpencil dan mudah dikekalkan. 1) Pelaksanaan antara muka yang tersirat menjadikannya mudah untuk membuat objek mengejek, yang dapat menggantikan pelaksanaan sebenar dalam ujian. 2) Menggunakan antara muka dengan mudah boleh menggantikan pelaksanaan sebenar perkhidmatan dalam ujian unit, mengurangkan kerumitan ujian dan masa. 3) Fleksibiliti yang disediakan oleh antara muka membolehkan perubahan dalam tingkah laku simulasi untuk kes ujian yang berbeza. 4) Antara muka membantu reka bentuk kod yang boleh diuji dari awal, meningkatkan modulariti dan mengekalkan kod.

Menggunakan init untuk permulaan pakej di GoMenggunakan init untuk permulaan pakej di GoApr 24, 2025 pm 06:25 PM

Di GO, fungsi INIT digunakan untuk permulaan pakej. 1) Fungsi init secara automatik dipanggil apabila permulaan pakej, dan sesuai untuk memulakan pembolehubah global, menetapkan sambungan dan memuatkan fail konfigurasi. 2) Terdapat pelbagai fungsi init yang boleh dilaksanakan dalam urutan fail. 3) Apabila menggunakannya, perintah pelaksanaan, kesukaran ujian dan kesan prestasi harus dipertimbangkan. 4) Adalah disyorkan untuk mengurangkan kesan sampingan, menggunakan suntikan ketergantungan dan penangguhan permulaan untuk mengoptimumkan penggunaan fungsi INIT.

Pernyataan Pilih Go: Pelbagai operasi serentakPernyataan Pilih Go: Pelbagai operasi serentakApr 24, 2025 pm 05:21 PM

Go'sSelectStatementStreamLinesConcurrentProgrammingByMultiPlexingOperations.1) itAllowSwaitingonMultiPlechannoPerations,

Teknik Konvensyen Lanjutan di GO: Konteks dan WaitgroupsTeknik Konvensyen Lanjutan di GO: Konteks dan WaitgroupsApr 24, 2025 pm 05:09 PM

ContextandWaitGroupSarecrucialingingoformanagingGoroutinesfectively.1) ContextAllowsSignalingCancellationandDeadlinesacrosapiboundaries, memastikangoroutinescanbestplygracely.2) WaitgroupSsynchronizegoroutine, Mempersembahkan CreationAllcebeBefefeSproprophering, Preveation

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma