DEV Community

Hamamd Tahir
Hamamd Tahir

Posted on

Real-Time Example: Using Goroutines and Channels

In Go, goroutines and channels are used for concurrent programming. Goroutines are lightweight threads of execution, and channels are used to communicate between goroutines. They are powerful features that make it easy to write concurrent programs in Go.

One real-world web application scenario where goroutines and channels can be useful is a web scraper. Web scraping involves fetching data from websites, which can be a time-consuming task. By using goroutines, you can fetch data from multiple websites concurrently, which can significantly speed up the process. Channels can be used to collect and process the data fetched from different websites.

Here's a simplified example of a web scraper in Go using goroutines and channels:

package main

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

func fetch(url string, ch chan<- string) {
    resp, err := http.Get(url)
    if err != nil {
        fmt.Println("Error fetching URL:", err)
        ch <- ""
        return
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Error reading response body:", err)
        ch <- ""
        return
    }

    ch <- string(body)
}

func main() {
    urls := []string{"https://example.com", "https://google.com", "https://github.com"}
    ch := make(chan string)

    for _, url := range urls {
        go fetch(url, ch)
    }

    for range urls {
        fmt.Println(<-ch)
    }
}

Enter fullscreen mode Exit fullscreen mode

In this example, the fetch function fetches the content of a URL using an HTTP GET request and sends the content to a channel. We create a goroutine for each URL in the urls slice, so the fetching of each URL happens concurrently. Finally, we read from the channel to get the fetched content and print it.

Top comments (0)