[ā§Ē] āĻāύāĻāĻžāϰā§āύā§āϏāĻŋ (Concurrency)
āĻāĻ āĻĒāϰā§āϝāĻžā§ā§ āĻāĻŽāϰāĻž āĻĒāϰāĻŋāĻāĻŋāϤ āĻšāĻŦā§ Go āĻāύāĻāĻžāϰā§āύā§āϏāĻŋāϰ āϏāĻžāĻĨā§āĨ¤ Go āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻŋāĻ āĻ āĻā§āĻŦāĻ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻāĻāĻāĻŋ āĻ āĻāĻļ āĻšāϞ āĻāύāĻāĻžāϰā§āύā§āϏāĻŋāĨ¤ āĻāĻŽāϰāĻž āĻ āύā§āĻā§āĻ āĻāύāĻāĻžāϰā§āύā§āϏāĻŋ āĻāĻŦāĻ āĻĒā§āϝāĻžāϰāĻžāϞā§āϞāĻŋāĻāĻŽ āĻļāĻŦā§āĻĻ āĻĻā§āĻāĻŋ āύāĻŋā§ā§ āĻĻā§āĻŦāĻŋāϧāĻžāύā§āĻŦāĻŋāϤ āĻĨāĻžāĻāĻŋāĨ¤ āĻāĻļāĻž āϰāĻžāĻāĻāĻŋ, āĻŦā§āĻāĻā§āϝāĻžāĻŽā§āĻĒā§āϰ āĻāĻ āĻ āĻāĻļā§ āĻāύāĻāĻžāϰā§āύā§āϏāĻŋ āĻāĻŦāĻ āĻĒā§āϝāĻžāϰāĻžāϞā§āϞāĻŋāĻāĻŽ āĻāϰ āϧāĻžāϰāĻŖāĻž āĻĒāϰāĻŋāώā§āĻāĻžāϰ āĻšā§ā§ āϝāĻžāĻŦā§ āĻāĻŦāĻ Go āϤ⧠āĻāϰ āĻĒā§āϰā§ā§āĻ āϏāĻŽā§āĻĒāϰā§āĻā§āĻ āϧāĻžāϰāĻŖāĻž āĻĒā§ā§ā§ āϝāĻžāĻŦā§āĨ¤
Â
āĻāύāĻāĻžāϰā§āύā§āϏāĻŋ āĻšāϞ āĻāĻŽāύ āĻāĻāĻāĻŋ āĻĒā§āϰāĻā§āϰāĻŋā§āĻž āϝā§āĻāĻžāύ⧠āĻ āύā§āĻāĻā§āϞ⧠āĻāĻžāĻ āĻŦāĻž āĻ āĻĒāĻžāϰā§āĻļāύ āĻāĻāĻāϏāĻžāĻĨā§ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻšāϤ⧠āĻĒāĻžāϰā§, āĻāĻŋāύā§āϤ⧠āĻāĻāĻ āϏāĻŽā§ā§ āĻšāϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤ āϝā§āĻŽāύ, āĻāĻāĻāύ āĻļā§āϰāĻŽāĻŋāĻ āϰāĻ āĻāϰāĻžāϰ āĻāĻžāĻ āĻāĻŦāĻ āĻĻā§ā§āĻžāϞ āĻŦāĻžāύāĻžāύā§āϰ āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻŋāύā§āϤ⧠āĻāĻāĻ āϏāĻŽā§ā§ āĻĻā§ā§āĻžāϞ āĻŦāĻžāύāĻžāύ⧠āĻāĻŦāĻ āϰāĻ āĻāϰāĻžāϰ āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤

             āĻĒā§āϝāĻžāϰāĻžāϞā§āϞāĻŋāĻāĻŽ āĻšāϞ āĻāĻŽāύ āĻāĻāĻāĻŋ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻž āϝā§āĻāĻžāύ⧠āĻ
āύā§āĻāĻā§āϞ⧠āĻāĻžāĻ āĻāĻāĻ āϏāĻžāĻĨā§ āĻāĻŦāĻ āĻāĻāĻ āϏāĻŽā§ā§ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϝā§āĻŽāύ, āĻāĻāĻāύ āϰāĻžāĻāϧā§āύāĻŋ āĻāĻŋāύā§āϤ⧠āĻāĻžāĻāϞā§āĻ āĻāĻāĻžāϧāĻŋāĻ āĻā§āϞāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāϏāĻžāĻĨā§ āĻā§ā§āĻāĻāĻŋ āĻāĻžāĻŦāĻžāϰ āϰāĻžāύā§āύāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āĻāĻāĻžāύ⧠āĻāĻāĻāĻŋ āĻāĻžāĻŦāĻžāϰ āϰāĻžāύā§āύāĻž āĻšāĻā§āĻžāϰ āĻāύā§āϝ āĻāϰā§āĻāĻāĻŋ āĻāĻžāĻŦāĻžāϰ āϰāĻžāύā§āύāĻž āĻļā§āώ āĻšāĻŦāĻžāϰ āĻĒā§āϰā§ā§āĻāύ āύā§āĻāĨ¤

Go āĻāϰ āύāĻŋāĻāϏā§āĻŦ āĻā§-āϰā§āĻāĻŋāύ āĻāĻŦāĻ āĻā§āϝāĻžāύā§āϞā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāύāĻāĻžāϰā§āύā§āϏāĻŋ āĻ āϰā§āĻāύ āĻāϰ⧠āĻĨāĻžāĻā§āĨ¤ āĻāĻ āĻĒāϰā§āϝāĻžā§ā§ āĻāĻŽāϰāĻž āĻā§-āϰā§āĻāĻŋāύ, āĻā§āϝāĻžāύā§āϞ, āĻāϝāĻŧā§āĻāĻā§āϰā§āĻĒ, āϏāĻŋāĻā§āĻāĻā§āϰā§āĻĒ āύāĻŋā§ā§ āĻāϞā§āĻāύāĻž āĻāϰāĻŦā§āĨ¤
[ā§Ē.ā§§] āĻā§-āϰā§āĻāĻŋāύ (Goroutine)
  āĻāĻŽāϰāĻž āĻāĻā§āĻ āĻŦāϞā§āĻāĻŋ āĻā§-āϰā§āĻāĻŋāύ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§, Go āĻāύāĻāĻžāϰā§āύā§āϏāĻŋ āĻ āϰā§āĻāύ āĻāϰ⧠āĻĨāĻžāĻā§āĨ¤ āϤāĻžāĻšāϞ⧠āĻĻā§āĻāĻž āϝāĻžāĻ āĻā§ āĻāĻžāĻŦā§ āĻāĻŽāϰāĻž āĻā§-āϰā§āĻāĻŋāύ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāύāĻāĻžāϰā§āύā§āϏāĻŋ āĻ āϰā§āĻāύ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āĻāĻŋāύā§āϤ⧠āϤāĻžāϰ āĻāĻā§ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻžāύāϤ⧠āĻšāĻŦā§ āĻā§-āϰā§āĻāĻŋāύ āĻā§, āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāĻŦāĻ āĻāĻžāĻāĨ¤
[ā§Ē.ā§§.ā§§] āĻā§-āϰā§āĻāĻŋāύ āĻā§ ?
āĻā§-āϰā§āĻāĻŋāύ āĻšāϞ⧠āĻĢāĻžāĻāĻļāύ āĻŦāĻž āĻŽā§āĻĨāĻĄ āϝāĻž āĻ āύā§āϝāĻžāύā§āϝ āĻĢāĻžāĻāĻļāύ āĻŦāĻž āĻŽā§āĻĨāĻĄā§āϰ āϏāĻžāĻĨā§ āĻāĻāĻāϏāĻŽā§ā§ āĻŦāĻž āĻāĻāĻāϏāĻžāĻĨā§ āϰāĻžāύ āĻāϰā§āĨ¤ āĻāĻŽāϰāĻž āĻāĻžāĻāϞ⧠āĻā§-āϰā§āĻāĻŋāύ āĻā§ thread āĻāϰ āϏāĻžāĻĨā§ āϤā§āϞāύāĻž āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āĻāĻāĻāĻŋ thread āĻāϰ āϤā§āϞāύāĻžā§ āĻāĻāĻāĻŋ āĻā§-āϰā§āĻāĻŋāύ āϤā§āϰāĻŋāϤā§, āϰāĻŋāϏā§āϰā§āϏā§āϰ āĻĒā§āϰā§ā§āĻāύā§ā§āϤāĻž āĻ āύā§āĻ āĻāĻŽ āĻāĻŦāĻ āĻāĻāĻāĻŋ āϏāĻŋāĻā§āĻā§āϞ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ⧠āĻ āύā§āĻāĻā§āϞ⧠āĻā§-āϰā§āĻāĻŋāύ āĻāĻāĻāϏāĻŽā§ā§ āĻ āĻāĻāĻāϏāĻžāĻĨā§ āĻāϞāϤ⧠āĻĒāĻžāϰā§āĨ¤
[ā§Ē.ā§§.⧍] āĻā§āĻāĻžāĻŦā§ āĻā§-āϰā§āĻāĻŋāĻ¨Â āĻļā§āϰ⧠āĻāϰāĻŦā§ ?
āĻā§ āĻĒāĻžāĻŦāĻžāϰ āĻā§āύ āĻāĻŋāĻā§ āύā§āĻ āĻāĻžāϰāĻŖ āĻā§-āϰā§āĻāĻŋāύ āĻļā§āϰ⧠āĻāϰāĻž āĻā§āĻŦāĻ āϏāĻšāĻāĨ¤ āĻĢāĻžāĻāĻļāύ āĻŦāĻž āĻŽā§āĻĨāĻĄā§āϰ āĻāĻā§ go āĻāĻŋāĻā§āĻžāϰā§āĻĄ āϞāĻŋāĻā§ āĻĻāĻŋāϞā§āĻ āύāϤā§āύ āĻā§-āϰā§āĻāĻŋāĻ¨Â āϤā§āϰāĻŋ āĻšā§ā§ āϝāĻžāĻŦā§āĨ¤ āύāĻŋāĻā§ āĻāĻĻāĻžāĻšāϰā§āύā§āϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āĻĻā§āĻāĻž āϝāĻžāĻ –Â
package main
import (
"fmt"
)
func hello() {
fmt.Println("Hello world Goroutine")
}
func main() {
go hello()
fmt.Println("main function")
}
//Output :
//main function
//Program exited.
  āĻāĻĒāϰā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖā§, go hello() āĻĻā§āĻŦāĻžāϰāĻž āύāϤā§āύ āĻā§-āϰā§āĻāĻŋāĻ¨Â āϤā§āϰāĻŋ āĻšā§ā§āĻā§āĨ¤ āĻāĻāύ hello() āĻĢāĻžāĻāĻļāύāĻāĻŋ main() āĻĢāĻžāĻāĻļāύā§āϰ āϏāĻžāĻĨā§ āĻāĻāĻāϏāĻžāĻĨā§ āϰāĻžāύ āĻāϰāĻŦā§āĨ¤ main() āĻĢāĻžāĻāĻļāύ āύāĻŋāĻā§āĻ āĻāĻāĻāĻŋ āĻā§-āϰā§āĻāĻŋāύ āĻšāĻŋāϏā§āĻŦā§ āϰāĻžāύ āĻšā§ āϝāĻžāĻā§ āĻŦāϞāĻž āĻšā§ āĻŽā§āĻāύ āĻā§-āϰā§āĻāĻŋāύāĨ¤Â Â
 āĻāĻĒāϰā§āϰ āĻāĻāĻāĻĒā§āĻā§āϰ āĻĻāĻŋāĻā§ āϝāĻĻāĻŋ āϞāĻā§āώ āĻāϰāĻŋ āϤāĻžāĻšāϞ⧠āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§ āĻļā§āϧ⧠âmain functionâ āϞā§āĻāĻžāĻāĻŋ āĻĒā§āϰāĻŋāύā§āĻ āĻšā§ā§āĻā§āĨ¤ āϤāĻžāĻšāϞ⧠āĻāĻŋ āĻāĻŽāĻžāĻĻā§āϰ āĻā§-āϰā§āĻāĻŋāύ āĻāĻžāĻ āĻāϰā§āύāĻŋ ? āĻŦāĻŋāώā§āĻāĻž āĻāϏāϞ⧠āĻāĻŽāύ āύāĻž, āĻāĻāĻž āĻŦā§āĻāϤ⧠āĻšāϞ⧠āĻāĻā§ āĻāĻŽāĻžāĻĻā§āϰ āĻā§-āϰā§āĻāĻŋāύ āĻāϰ āĻĻā§āĻāĻāĻž āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻŦā§āĻāϤ⧠āĻšāĻŦā§āĨ¤ āĻĻā§āĻāĻž āϝāĻžāĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻĻā§āĻāĻŋ āĻā§ –Â
Â
ā§§āĨ¤ āϝāĻāύ āĻāĻāĻāĻŋ āύāϤā§āύ āĻā§-āϰā§āĻāĻŋāύ āĻļā§āϰ⧠āĻšāϝāĻŧ, āϤāĻāύ āĻ āύā§āϝ āĻĢāĻžāĻāĻļāύāĻā§āϞ⧠āĻā§-āϰā§āĻāĻŋāύ āϰāĻŋāĻāĻžāϰā§āύ āĻāϏāĻž āĻĒāϰā§āϝāύā§āϤ āĻ āĻĒā§āĻā§āώāĻž āĻāϰ⧠āύāĻž āĻāĻŦāĻ āĻā§āĻĄā§āϰ āĻĒāϰāĻŦāϰā§āϤ⧠āϞāĻžāĻāύāĻā§āϞ⧠āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻ āĻāϰāϤ⧠āĻĨāĻžāĻā§āĨ¤
Â
⧍āĨ¤ āĻāĻā§āĻ āĻŦāϞā§āĻāĻŋāϞāĻžāĻŽ main() āĻĢāĻžāĻāĻļāύ āϤāĻžāϰ āύāĻŋāĻāϏā§āĻŦ āĻā§-āϰā§āĻāĻŋāύ āĻ āĻāϞā§āĨ¤ āĻāĻāύ āĻ āύā§āϝ āĻā§āύ āĻā§-āϰā§āĻāĻŋāύ āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ āĻŽā§āĻāύ āĻā§-āϰā§āĻāĻŋāύāĻāĻŋ āĻ āĻŦāĻļā§āϝāĻ āĻāϞāĻŽāĻžāύ āĻšāϤ⧠āĻšāĻŦā§āĨ¤ āϝāĻĻāĻŋ āĻŽā§āĻāύ āĻā§-āϰā§āĻāĻŋāύ āĻŦāύā§āϧ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ āϤāĻžāĻšāϞ⧠āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋ āĻŦāύā§āϧ āĻšāϝāĻŧā§ āϝāĻžāĻŦā§ āĻāĻŦāĻ āĻ āύā§āϝ āĻā§āύ āĻā§-āϰā§āĻāĻŋāύ āĻāϰ āĻāϞāĻŦā§ āύāĻžāĨ¤Â
āĻāĻ āĻāĻāĻ āĻāĻžāĻāĻāĻžāĻ āĻāĻŽāĻžāĻĻā§āϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§āϰ āĻā§āώā§āϤā§āϰ⧠āĻšā§ā§āĻā§, āϝāĻžāϰ āĻāĻžāϰāĻŖā§ āĻāĻŽāĻžāĻĻā§āϰ āĻā§-āϰā§āĻāĻŋāύ āϏāĻŽā§āĻĒā§āϰā§āĻŖāĻāĻžāĻŦā§ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻ āĻšā§āύāĻŋāĨ¤Â
āĻāĻŦāĻžāϰ āĻāĻ āϏāĻŽāϏā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻž āϝāĻžāĻāĨ¤ āύāĻŋāĻā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖāĻāĻž āĻā§ā§āĻžāϞ āĻāϰāĻŋ –Â
package main
import (
"fmt"
"time"
)
func hello() {
fmt.Println("Hello world Goroutine")
}
func main() {
go hello()
time.Sleep(1 * time.Second)
fmt.Println("main function")
}
//Output :
//Hello world Goroutine
//main function
āĻāĻāĻžāύ⧠āĻāĻŽāϰāĻž hello() āĻĢāĻžāĻāĻļāύāĻā§ main() āĻĢāĻžāĻāĻļāύā§āϰ āĻā§āϤāϰ āĻĨā§āĻā§ āĻā§-āϰā§āĻāĻŋāύ⧠āĻĒāĻžāĻ āĻŋā§ā§āĻāĻŋāĨ¤ āĻāĻāύ hello() āĻāϰ āĻāύā§āϝ main() āĻĢāĻžāĻāĻļāύ āĻ āĻĒā§āĻā§āώāĻž āύāĻž āĻāϰ⧠āĻĒāϰā§āϰ āϞāĻžāĻāύ⧠āĻāϞ⧠āϝāĻžāĻŦā§āĨ¤ āĻāĻŋāύā§āϤ⧠āĻĒāϰā§āϰ āϞāĻžāĻāύ⧠time.Sleep() āĻā§ āĻāϞ āĻāϰā§āĻāĻŋ āĻāĻŦāĻ āϤāĻžāĻā§ āĻāĻ āϏā§āĻā§āύā§āĻĄ āĻ āĻĒā§āĻā§āώāĻž āĻāϰāϤ⧠āĻŦāϞā§āĻāĻŋāĨ¤ āĻāĻ āĻ āĻĒā§āĻā§āώāĻžāĻāĻžāϞā§āύ āϏāĻŽā§ā§āĻ āĻā§-āϰā§āĻāĻŋāύ āĻāϰ āĻĢāĻžāĻāĻļāύāĻāĻŋ āϏāĻŽā§āĻĒā§āϰā§āĻŖāĻāĻžāĻŦā§ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻ āĻšā§ā§ āϝāĻžāĻŦā§ āĻāĻŦāĻ āĻāύāϏā§āϞ⧠âHello word Goroutineâ āĻĒā§āϰāĻŋāύā§āĻ āĻāϰāĻŦā§āĨ¤ āĻāĻ āĻāĻ āϏā§āĻā§āύā§āĻĄ āĻ āϤāĻŋāĻā§āϰāĻžāύā§āϤ āĻšāϞ⧠āĻĒāϰā§āϰ āĻā§āĻĄ āĻā§āϞ⧠āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻ āĻšāĻā§āĻž āĻļā§āϰ⧠āĻāϰāĻŦā§, āĻ āϰā§āĻĨāĻžā§ “main function” āĻŽā§āϏā§āĻāĻāĻŋ āĻĒā§āϰāĻŋāύā§āĻ āĻšā§ā§ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻļā§āώ āĻšāĻŦā§āĨ¤
[ā§Ē.ā§§.ā§Š] āĻŽāĻžāϞā§āĻāĻŋāĻĒāϞ āĻā§-āϰā§āĻāĻŋāύ (Multiple Goroutine) Â
āĻāĻā§āĻ āĻŦāϞāĻž āĻšā§ā§āĻā§ āĻāĻāĻāĻž āϏāĻŋāĻā§āĻā§āϞ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ⧠āĻāĻāĻžāϧāĻŋāĻ āĻā§-āϰā§āĻāĻŋāύ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤ āύāĻŋāĻā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖā§āϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āĻŽāĻžāϞā§āĻāĻŋāĻĒāϞ āĻā§-āϰā§āĻāĻŋāύ āĻŦā§āĻāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻŋ –
package main
import (
"fmt"
"time"
)
func numbers() {
for i := 1; i <= 5; i++ {
time.Sleep(250 * time.Millisecond)
fmt.Printf("%d ", i)
}
}
func alphabets() {
for i := 'a'; i <= 'e'; i++ {
time.Sleep(400 * time.Millisecond)
fmt.Printf("%c ", i)
}
}
func main() {
go numbers()
go alphabets()
time.Sleep(3000 * time.Millisecond)
fmt.Println("main terminated")
}
//Output : 1 a 2 3 b 4 c 5 d e main terminated
 āĻāĻĒāϰā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖā§, āĻĻā§āĻāĻāĻŋ āĻā§-āϰā§āĻāĻŋāύ numbers() āĻāĻŦāĻ alphabets() āĻāύāĻāĻžāϰā§āύā§āĻāϞāĻŋ āĻāϞāϤā§āĻā§āĨ¤ numbers āĻā§-āϰā§āĻāĻŋāύ āĻļā§āϰā§āϤ⧠250 āĻŽāĻŋāϞāĻŋāϏā§āĻā§āύā§āĻĄ āϏā§āϞā§āĻĒā§āϰ āĻĒāϰ 1 āĻĒā§āϰāĻŋāύā§āĻ āĻāϰāĻŦā§, āĻāϰāĻĒāϰ āĻāϰāĻ 250 āĻŽāĻŋāϞāĻŋāϏā§āĻā§āύā§āĻĄ āĻĒāϰ⧠2 āĻĒā§āϰāĻŋāύā§āĻ āĻāϰāĻŦā§, āĻāĻāĻžāĻŦā§ 5 āĻĒāϰā§āϝāύā§āϤ āĻĒā§āϰāĻŋāύā§āĻ āĻāϰāϤ⧠āĻĨāĻžāĻāĻŦā§āĨ¤ āϏā§āĻāĻŽ alphabets() 400 āĻŽāĻŋāϞāĻŋāϏā§āĻā§āύā§āĻĄ āĻĒāϰāĻĒāϰ a āĻĨā§āĻā§ e āĻĒāϰā§āϝāύā§āϤ āĻĒā§āϰāĻŋāύā§āĻ āĻāϰāϤ⧠āĻĨāĻžāĻāĻŦā§āĨ¤ āϤāĻžāϰāĻĒāϰ 3000 āĻŽāĻŋāϞāĻŋāϏā§āĻā§āύā§āĻĄ āĻĒāϰ âmain terminatedâ āĻĒā§āϰāĻŋāύā§āĻ āĻšāĻŦā§ āĻāĻŦāĻ main() āĻĢāĻžāĻāĻļāύ āĻŦāύā§āϧ āĻšā§ā§ āϝāĻžāĻŦā§āĨ¤
Â
āĻāϏāϞ⧠āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰāĻā§ āύāĻŋāĻā§āϰ āĻĄāĻžā§āĻžāĻā§āϰāĻžāĻŽā§āϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āĻŦā§āĻāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻŋ :

āĻāĻŦāĻŋāĻāĻŋāϰ āĻĒā§āϰāĻĨāĻŽ āĻ āĻāĻļā§āϰ āύā§āϞ āĻāĻžāϞāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž  numbers āĻā§-āϰā§āĻāĻŋāύ , āĻĻā§āĻŦāĻŋāϤā§ā§ āĻ āĻāĻļā§āϰ āϞāĻžāϞ āĻāĻžāϞāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž alphabets āĻā§-āϰā§āĻāĻŋāύ  , āϤā§āϤā§ā§ āĻ āĻāĻļā§āϰ āϏāĻŦā§āĻ āĻāĻžāϞāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž main āĻā§-āϰā§āĻāĻŋāύ āĻāĻŦāĻ āϏāϰā§āĻŦāĻļā§āώ āĻāĻžāϞ⧠āĻāĻžāϞāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻ āĻāĻāĻĒā§āĻ āĻĒā§āϰāĻāĻžāĻļ āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤ āĻāĻļāĻž āĻāϰāĻž āϝāĻžā§Â āĻā§-āϰā§āĻāĻŋāύ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻŽāϰāĻž āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻŦā§āĻāϤ⧠āĻĒā§āϰā§āĻāĻŋāĨ¤
[ā§Ē.ā§§.ā§Ē] āĻā§āϞā§āĻāĻŋāĻ āĻā§-āϰā§āĻāĻŋāύ(Closing Goroutine)
āĻā§-āϰā§āĻāĻŋāύā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻļā§āώ⧠āϤāĻž āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻŦāύā§āϧ āĻāϰāĻžāĻāĻž āĻāϰā§āϰāĻŋāĨ¤ āĻāĻ āĻĒāϰā§āϝāĻžā§ā§ āĻāĻŽāϰāĻž āϏāĻ āĻŋāĻ āĻĒāĻĻā§āϧāϤāĻŋāϤ⧠āĻā§-āϰā§āĻāĻŋāύ āĻŦāύā§āϧ āĻāϰāĻžāϰ āϧāĻžāĻĒāĻā§āϞā§āϰ āϏāĻžāĻĨā§ āĻĒāϰāĻŋāĻāĻŋāϤ āĻšāĻŦā§ –Â
- āĻā§-āϰā§āĻāĻŋāύ āĻŦāύā§āϧ āĻāϰāĻžāϰ āϏāĻŦāĻĨā§āĻā§ āϏāĻšāĻ āĻāĻĒāĻžā§ āĻšāϞ⧠āϏāĻŋāĻāύāĻžāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ āĻāĻ āĻĒāĻĻā§āϧāϤāĻŋāϤ⧠āĻā§āϝāĻžāύā§āϞā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻāĻāĻŋ āϏāĻŋāĻāύā§āϝāĻžāϞ āĻāĻā§āϤ āĻā§-āϰā§āĻāĻŋāύ⧠āĻĒāĻžāĻ āĻžāύ⧠āĻšā§ āĻāĻŦāĻ āĻā§-āϰā§āĻāĻŋāύ āĻāĻ āĻā§āϝāĻžāύā§āϞ⧠āĻāĻŋāĻā§ āϰāĻŋāϏāĻŋāĻā§āϰ āĻ āĻĒā§āĻā§āώāĻžā§ āĻĨāĻžāĻā§, āϝāĻž āĻĒā§ā§ā§ āĻā§āϞ⧠āύāĻŋāĻā§ āĻĨā§āĻā§ āĻŦāύā§āϧ āĻšā§ā§ āϝāĻžā§āĨ¤Â
- āĻĒā§āϰāĻĨāĻŽā§ āĻāĻāĻāĻŋ āĻā§āϝāĻžāύā§āϞ āϤā§āϰāĻŋ āĻāϰ⧠āύā§āĻŦā§ āϝāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻāĻŽāϰāĻž āϏāĻŋāĻāύāĻžāϞāĻāĻŋ āĻĒāĻžāĻ āĻžāĻŦā§ –Â
cancel := make(chan struct{})
-  āĻā§āϝāĻžāύā§āϞāĻāĻŋ āĻāĻāĻāĻŋ āĻā§-āϰā§āĻāĻŋāύā§āϰ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āĻĒāĻžāϏ āĻāϰāĻŋ –Â
go worker(cancel)
āĻĢāĻžāĻāĻļāύāĻāĻŋ –Â
func worker(cancel <-chan struct{}) {
fmt.Println("Worker started")
defer fmt.Println("Worker stopped")
for {
select {
case <-cancel:
fmt.Println("Worker cancelled")
return
default:
// Do some work here
time.Sleep(time.Second)
fmt.Println("Working...")
}
}
}
- āĻāĻŦāĻžāϰ⧠cancel āĻā§āϝāĻžāύā§āϞ⧠āĻā§āϞā§āĻāĻŋāĻ āϏāĻŋāĻāύāĻžāϞ āĻĒāĻžāĻ āĻŋā§ā§ āĻā§-āϰā§āĻāĻŋāύāĻāĻŋ āĻŦāύā§āϧ āĻšāĻŦāĻžāϰ āĻāύā§āϝ āĻ āĻĒā§āĻā§āώāĻž āĻāϰāĻŦ –Â
time.Sleep(5 * time.Second)
fmt.Println("Canceling worker")
close(cancel)
time.Sleep(2 * time.Second)
fmt.Println("Main goroutine stopped")
-  āĻā§-āϰā§āĻāĻŋāύāĻāĻŋ āĻŦāύā§āϧ āĻšā§ā§ āĻā§āϞ⧠āĻāϰāĻĒāϰ main() āĻĢāĻžāĻāĻļāύā§āϰ āĻāĻžāĻ āĻļā§āώ⧠āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋāϰ āĻāĻžāĻ āĻļā§āώ āĻšāĻŦā§āĨ¤ āϤāĻžāĻšāϞ⧠āĻĒā§āϰ⧠āĻā§āĻĄāĻāĻŋ āĻĻāĻžāĻā§āĻžāϞ⧠–Â
package main
import (
"fmt"
"time"
)
func worker(cancel <-chan struct{}) {
fmt.Println("Worker started")
defer fmt.Println("Worker stopped")
for {
select {
case <-cancel:
fmt.Println("Worker canceled")
return
default:
// Do some work here
time.Sleep(time.Second)
fmt.Println("Working...")
}
}
}
func main() {
cancel := make(chan struct{})
go worker(cancel)
time.Sleep(5 * time.Second)
fmt.Println("Canceling worker")
close(cancel)
time.Sleep(2 * time.Second)
fmt.Println("Main goroutine stopped")
}
- time.Sleep() āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻāĻĻā§āĻĻā§āĻļā§āϝ āĻšāϞ⧠āĻā§-āϰā§āĻāĻŋāύā§āϰ āĻāĻžāĻ āĻ āĻŋāĻāĻŽāϤ⧠āĻāϰāϤ⧠āĻĻā§ā§āĻžāĨ¤
āĻāĻāĻāĻĒā§āĻ –Â
Worker started
Working...
Working...
Working...
Working...
Canceling worker
Working...
Worker canceled
Worker stopped
Main goroutine stopped