How is func printCounts running ten times ?please explain

package main

import (

// wg is used to wait for the program to finish.
var wg sync.WaitGroup

func main() {
	count := make(chan int)
	// Add a count of two, one for each goroutine.
	fmt.Println("Start Goroutines")
	// Launch a goroutine with label "Goroutine-1"
	go printCounts("Goroutine-1", count)
	// Launch a goroutine with label "Goroutine-2"
	go printCounts("Goroutine-2", count)
	fmt.Println("Communication of channel begins")
	count <- 1
	// Wait for the goroutines to finish.
	fmt.Println("Waiting To Finish")
	fmt.Println("\nTerminating the Program")
func printCounts(label string, count chan int) {
	// Schedule the call to WaitGroup's Done to tell goroutine is completed.
	defer wg.Done()
	for val := range count {
		fmt.Printf("Count: %d received from %s \n", val, label)
		if val == 10 {
			fmt.Printf("Channel Closed from %s \n", label)
			// Close the channel
		// Send count back to the other goroutine.
		count <- val

Please format the code in your question i a readable way. This can easily be done by selecting the code and hitting the </> button at the top of the edut window.

1 Like

ok done! now can you explain the code to me?

printCounts is not running ten times. There is a for val := range count loop in printCounts that keeps “ping-ponging” an incrementing count between Goroutine-1 and Goroutine-2 until that count gets to 10, at which point, the channel is closed so both Goroutines exit the loop and printCounts.


thankyou Sean!

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.