āļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļ Go
āļŠāļģāļĢāļ§āļāļāļĨāļąāļāļāļāļāđāļĄāđāļāļĨāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļāļ Go āđāļĢāļĩāļĒāļāļĢāļđāđāļĢāļđāļāđāļāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āđāļĨāļ°āļāđāļāļāļāđāļāļāļāļīāļāļāļēāļĢāđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļŠāļĢāđāļēāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļĩāđāļĢāļ§āļāđāļĢāđāļ§āđāļĨāļ°āđāļāļ·āđāļāļāļ·āļāđāļāđ

āļĢāļđāđāđāļāļ·āđāļāļāļāđāļāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļ Go
āļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļ·āļāļāļēāļĢāļāļąāļāļĢāļ°āđāļāļĩāļĒāļāļāļāļāļāļēāļāļāļīāļŠāļĢāļ°āļāļĩāđāļāļģāđāļāļīāļāļāļēāļĢāđāļāļĒāđāļāļĢāđāļāļĢāļĄāđāļāļĨāļąāļāļĐāļāļ°āļāļĢāđāļāļĄāļāļąāļāļŦāļĢāļ·āļāđāļāļāļāļāļēāļāđāļāļĩāļĒāļĄ āļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļāđāļāļĨāļąāļāļĐāļāļ°āļāļ·āđāļāļāļēāļāļāļāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄāļŠāļĄāļąāļĒāđāļŦāļĄāđ āļāđāļ§āļĒāđāļŦāđāļāļąāļāļāļąāļāļāļēāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļĢāļ°āđāļĒāļāļāđāļāļēāļāļĻāļąāļāļĒāļ āļēāļāļāļāļāđāļāļĢāđāļāļŠāđāļāļāļĢāđāđāļāļāļĄāļąāļĨāļāļīāļāļāļĢāđāđāļāđāļāļĒāđāļēāļāđāļāđāļĄāļāļĩāđ āļāļąāļāļāļēāļĢāļāļĢāļąāļāļĒāļēāļāļĢāļĢāļ°āļāļāđāļāđāļāļĒāđāļēāļāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āđāļĨāļ°āļĨāļāļāļ§āļēāļĄāļāļąāļāļāđāļāļāļāļāļāļāļēāļĢāļāļāļāđāļāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļĩāđāļāļąāļāļāđāļāļ
Go āļŦāļĢāļ·āļāļāļĩāđāđāļĢāļĩāļĒāļāļ§āđāļē golang āđāļāđāļāļ āļēāļĐāļēāđāļāļĢāđāļāļĢāļĄāļāļāļĄāđāļāļĨāđāđāļāļāļŠāđāļāļāļīāļāļāļĩāđāļāļāļāđāļāļāđāļāļĒāļāļģāļāļķāļāļāļķāļāļāļ§āļēāļĄāđāļĢāļĩāļĒāļāļāđāļēāļĒāđāļĨāļ°āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļāđāļāļŦāļĨāļąāļ āļĢāļđāļāđāļāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļāđāļĢāļąāļāđāļĢāļāļāļąāļāļāļēāļĨāđāļāļāļēāļ Communicating Sequential Processes (CSP) āļāļāļ Tony Hoare āļāļķāđāļāđāļāđāļāļĢāļđāļāđāļāļāļāļĩāđāļŠāđāļāđāļŠāļĢāļīāļĄāļāļēāļĢāļŠāļĢāđāļēāļāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāļīāļŠāļĢāļ°āļāļĩāđāđāļāļ·āđāļāļĄāļāđāļāļāļąāļāļāđāļ§āļĒāļāđāļāļāļāļēāļāļāļēāļĢāļŠāđāļāļāđāļāļāļ§āļēāļĄāļāļĩāđāļāļąāļāđāļāļ āļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļ Go āđāļāļĩāđāļĒāļ§āļāđāļāļāļāļąāļāđāļāļ§āļāļīāļāļāļāļ goroutines, channel āđāļĨāļ°āļāļģāļŠāļąāđāļ 'select'
āļāļĩāđāļāļāļĢāđāļŦāļĨāļąāļāđāļŦāļĨāđāļēāļāļĩāđāļāđāļ§āļĒāđāļŦāđāļāļąāļāļāļąāļāļāļēāļŠāļēāļĄāļēāļĢāļāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļāļĢāļ°āļāļąāļāļŠāļđāļāđāļāđāļāļĒāđāļēāļāļāđāļēāļĒāļāļēāļĒāđāļĨāļ°āđāļāđāđāļāđāļāļŠāļģāđāļĢāđāļāļĢāļđāļāļāđāļāļĒāļāļĩāđāļŠāļļāļ āļāļāļ°āđāļāļĩāļĒāļ§āļāļąāļāļāđāļĢāļąāļāļāļĢāļ°āļāļąāļāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāđāļĨāļ°āļāļēāļĢāļāļīāļāđāļāļĢāđāļāļāđāļāļĩāđāļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āđāļĄāđāļāļĒāļģāļĢāļ°āļŦāļ§āđāļēāļāļāļēāļāļāđāļēāļāđ āļāļĩāđ AppMaster āļāļąāļāļāļąāļāļāļēāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļļāļĄāļāļĨāļąāļāļāļāļāđāļĄāđāļāļĨāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļāļ Go āđāļāļ·āđāļāļŠāļĢāđāļēāļāđāļāļāļāļĨāļīāđāļāļāļąāļāđāļāđāļāđāļāļāļāđāļāļĩāđāļāļĢāļąāļāļāļāļēāļāđāļāđāđāļĨāļ°āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļŠāļđāļāļāđāļ§āļĒāļāļąāļ§āļāļāļāđāļāļāļāļīāļĄāļāđāđāļāļĩāļĒāļ§āđāļāļāļ āļēāļāđāļĨāļ°āļāļēāļĢāļŠāļĢāđāļēāļāļāļāļĢāđāļŠāđāļāđāļāļāļąāļāđāļāļĄāļąāļāļī
Goroutines: āļŦāļāđāļ§āļĒāļāļēāļĢāļŠāļĢāđāļēāļāļāļāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļ
āđāļ Go āļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļđāļāļŠāļĢāđāļēāļāļāļķāđāļāļāļēāļāđāļāļ§āļāļīāļāļāļāļ goroutines āļāļķāđāļāđāļāđāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļĨāđāļēāļĒāđāļāļĢāļāļāļĩāđāļĄāļĩāļāđāļģāļŦāļāļąāļāđāļāļēāļāļķāđāļāļāļąāļāļāļēāļĢāđāļāļĒāļāļąāļ§āļāļģāļŦāļāļāļāļēāļĢāļēāļāđāļ§āļĨāļēāļĢāļąāļāđāļāļĄāđāļāļāļ Go Goroutines āļĄāļĩāļĢāļēāļāļēāļāļđāļāļāļĒāđāļēāļāđāļĄāđāļāđāļēāđāļāļ·āđāļāđāļĄāļ·āđāļāđāļāļĩāļĒāļāļāļąāļ OS thread āđāļĨāļ°āļāļąāļāļāļąāļāļāļēāļŠāļēāļĄāļēāļĢāļāļ§āļēāļāđāļāđāđāļāđāļŦāļĨāļēāļĒāļāļąāļāļŦāļĢāļ·āļāļŦāļĨāļēāļĒāļĨāđāļēāļāļĢāļēāļĒāļāļēāļĢāđāļāđāļāļĢāđāļāļĢāļĄāđāļāļĩāļĒāļ§āđāļāļĒāđāļĄāđāļāđāļāļāđāļāđāļāļĢāļąāļāļĒāļēāļāļĢāļĢāļ°āļāļāļĄāļēāļāđāļāļīāļāđāļ āļŦāļēāļāļāđāļāļāļāļēāļĢāļŠāļĢāđāļēāļ goroutine āđāļāļĩāļĒāļāļāļģāļŦāļāđāļēāļāļēāļĢāđāļĢāļĩāļĒāļāđāļāđāļāļąāļāļāđāļāļąāļāļāđāļ§āļĒāļāļĩāļĒāđāđāļ§āļīāļĢāđāļ 'go' āđāļĄāļ·āđāļāđāļĢāļĩāļĒāļāđāļāđ āļāļąāļāļāđāļāļąāļāļāļ°āļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļąāļāļŠāđāļ§āļāļāļĩāđāđāļŦāļĨāļ·āļāļāļāļāđāļāļĢāđāļāļĢāļĄ:
func printMessage(message string) { fmt.Println(message) } func main() { go printMessage("Hello, concurrency!") fmt.Println("This might print first.") }
āđāļāļĢāļāļŠāļąāļāđāļāļāļ§āđāļēāļĨāļģāļāļąāļāļāļāļāļāđāļāļāļ§āļēāļĄāļāļĩāđāļāļīāļĄāļāđāđāļĄāđāđāļāđāļāļđāļāļāļģāļŦāļāļāļāļķāđāļ āđāļĨāļ°āļāđāļāļāļ§āļēāļĄāļāļĩāđāļŠāļāļāļāļēāļāļāļđāļāļāļīāļĄāļāđāļāđāļāļāļāđāļāļāļ§āļēāļĄāđāļĢāļ āļŠāļīāđāļāļāļĩāđāđāļŠāļāļāđāļŦāđāđāļŦāđāļāļ§āđāļē goroutines āļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļąāļāļŠāđāļ§āļāļāļĩāđāđāļŦāļĨāļ·āļāļāļāļāđāļāļĢāđāļāļĢāļĄ āđāļĨāļ°āđāļĄāđāļĢāļąāļāļāļĢāļ°āļāļąāļāļāļģāļŠāļąāđāļāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāļāļāļ goroutine āļāļąāļ§āļāļģāļŦāļāļāļāļēāļĢāļēāļāđāļ§āļĨāļēāļĢāļąāļāđāļāļĄāđ Go āļĄāļĩāļŦāļāđāļēāļāļĩāđāļāļąāļāļāļēāļĢāđāļĨāļ°āļāļģāđāļāļīāļāļāļēāļĢ goroutines āđāļāļ·āđāļāđāļŦāđāđāļāđāđāļāļ§āđāļēāļĢāļąāļāđāļāļĄāđāļāļĢāđāļāļĄāļāļąāļāđāļāļāļāļ°āļāļĩāđāđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļēāļĢāđāļāđāļāļēāļ CPU āđāļĨāļ°āļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļāļāļēāļĢāļŠāļĨāļąāļāļāļĢāļīāļāļāļāļĩāđāđāļĄāđāļāļģāđāļāđāļ āļāļąāļ§āļāļģāļŦāļāļāļāļēāļĢāļēāļāđāļ§āļĨāļēāļāļāļ Go āđāļāđāļāļąāļĨāļāļāļĢāļīāļāļķāļĄāļāļēāļĢāļāđāļĄāļĒāļāļēāļāđāļĨāļ°āļāļģāļŦāļāļāđāļ§āļĨāļē goroutines āđāļāļāļĢāđāļ§āļĄāļĄāļ·āļ āđāļāļ·āđāļāđāļŦāđāļĄāļąāđāļāđāļāļ§āđāļēāļāļ°āđāļŦāđāļāļēāļĢāļāļ§āļāļāļļāļĄāđāļĄāļ·āđāļāđāļŦāļĄāļēāļ°āļŠāļĄ āđāļāđāļ āđāļāļĢāļ°āļŦāļ§āđāļēāļāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāļāļĩāđāļĒāļēāļ§āļāļēāļāļŦāļĢāļ·āļāđāļĄāļ·āđāļāļĢāļāđāļŦāļāļļāļāļēāļĢāļāđāđāļāļĢāļ·āļāļāđāļēāļĒ
āđāļāļĢāļāļāļĢāļēāļāļ§āđāļē goroutines āđāļĄāđāļāļ°āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āđāļāđāļāđāđāļĄāđāļāļ§āļĢāđāļāđāļāļĒāđāļēāļāđāļĄāđāļĢāļ°āļĄāļąāļāļĢāļ°āļ§āļąāļ āļŠāļīāđāļāļŠāļģāļāļąāļāļāļ·āļāļāđāļāļāļāļīāļāļāļēāļĄāđāļĨāļ°āļāļąāļāļāļēāļĢāļ§āļāļāļĢāļāļĩāļ§āļīāļāļāļāļ goroutines āļāļāļāļāļļāļāđāļāļ·āđāļāđāļŦāđāđāļāđāđāļāļ§āđāļēāđāļāļāļāļĨāļīāđāļāļāļąāļāļĄāļĩāļāļ§āļēāļĄāđāļŠāļāļĩāļĒāļĢāđāļĨāļ°āļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļāļāļēāļĢāļĢāļąāđāļ§āđāļŦāļĨāļāļāļāļāļĢāļąāļāļĒāļēāļāļĢ āļāļąāļāļāļąāļāļāļēāļāļ§āļĢāļāļīāļāļēāļĢāļāļēāđāļāđāļĢāļđāļāđāļāļ āđāļāđāļ āļāļđāļĨāļāļđāđāļāļāļīāļāļąāļāļīāļāļēāļ āđāļāļ·āđāļāļāļģāļāļąāļāļāļģāļāļ§āļāļāļāļ goroutines āļāļĩāđāđāļāđāļāļāļĩāļ āļ āđāļ§āļĨāļēāđāļāļāđāļāļēāļĄ
āļāđāļāļāļāļēāļ: āļāļēāļĢāļāļīāļāđāļāļĢāđāļāļāđāđāļĨāļ°āļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāļĢāļ°āļŦāļ§āđāļēāļ Goroutines
āđāļāļāđāļāļĨāđāļāđāļāļŠāđāļ§āļāļāļ·āđāļāļāļēāļāļāļāļāđāļĄāđāļāļĨāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļāļ Go āļāļķāđāļāļāđāļ§āļĒāđāļŦāđ goroutines āļŠāļēāļĄāļēāļĢāļāļŠāļ·āđāļāļŠāļēāļĢāđāļĨāļ°āļāļīāļāđāļāļĢāđāļāļāđāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāđāļāđāļāļĒāđāļēāļāļāļĨāļāļāļ āļąāļĒ āļāđāļāļāđāļāđāļāļāđāļēāļāļąāđāļāļŦāļāļķāđāļāđāļ Go āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļāđāđāļāļĒāđāļāđāļāļąāļāļāđāļāļąāļ 'make' āđāļāļĒāļĄāļĩāļāļāļēāļāļāļąāļāđāļāļāļĢāđāđāļŠāļĢāļīāļĄāđāļāļ·āđāļāļāļ§āļāļāļļāļĄāļāļ§āļēāļĄāļāļļ:
// Unbuffered channel ch := make(chan int) // Buffered channel with a capacity of 5 bufCh := make(chan int, 5)
āļāļēāļĢāđāļāđāđāļāļāđāļāļĨāļāļąāļāđāļāļāļĢāđāļāļĩāđāļĄāļĩāļāļ§āļēāļĄāļāļļāļāļĩāđāļĢāļ°āļāļļāļāļģāđāļŦāđāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāđāļēāļŦāļĨāļēāļĒāļāđāļēāđāļāđāļāļāđāļāļĨāđāļāđ āđāļāļĒāļāļģāļŦāļāđāļēāļāļĩāđāđāļāđāļāļāļīāļ§āļāļĒāđāļēāļāļāđāļēāļĒ āļŠāļīāđāļāļāļĩāđāļŠāļēāļĄāļēāļĢāļāļāđāļ§āļĒāđāļāļīāđāļĄāļāļĢāļīāļĄāļēāļāļāļēāļāđāļāđāđāļāļāļēāļāļŠāļāļēāļāļāļēāļĢāļāđ āđāļāđāļāļąāļāļāļąāļāļāļēāļāļ°āļāđāļāļāļĢāļ°āļĄāļąāļāļĢāļ°āļ§āļąāļāđāļĄāđāđāļŦāđāđāļāļīāļāļāļąāļāļŦāļēāļāļēāļĢāļŦāļĒāļļāļāļāļ°āļāļąāļāļŦāļĢāļ·āļāļāļąāļāļŦāļēāļāļēāļĢāļāļīāļāđāļāļĢāđāļāļāđāļāļ·āđāļāđ āļāļēāļĢāļŠāđāļāļāđāļēāļāđāļēāļāļāđāļāļāļŠāļąāļāļāļēāļāļāļ°āļāļģāđāļāļīāļāļāļēāļĢāļāđāļēāļāļāļąāļ§āļāļģāđāļāļīāļāļāļēāļĢ '<-':
// Sending the value 42 through the channel ch <- 42 // Sending values in a for loop for i := 0; i < 10; i++ { ch <- i }
āđāļāļāļģāļāļāļāđāļāļĩāļĒāļ§āļāļąāļ āļāļēāļĢāļĢāļąāļāļāđāļēāļāļēāļāđāļāļāđāļāļĨāļāļ°āđāļāđāļāļąāļ§āļāļģāđāļāļīāļāļāļēāļĢ '<-' āļāļąāļ§āđāļāļĩāļĒāļ§āļāļąāļ āđāļāđāđāļāđāđāļāļāđāļāļĨāļāļēāļāļāļ§āļēāļĄāļ·āļ:
// Receiving a value from the channel value := <-ch // Receiving values in a for loop for i := 0; i < 10; i++ { value := <-ch fmt.Println(value) }
āđāļāļāđāļāļĨāļāļģāđāļŠāļāļāļŠāļīāđāļāļāļĩāđāđāļāđāļāļāļēāļĄāļāļĢāļĢāļĄāļāļĩāđāđāļĢāļĩāļĒāļāļāđāļēāļĒāđāļāđāļāļĢāļāļāļĨāļąāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāđāļĨāļ°āļāļīāļāđāļāļĢāđāļāļāđ goroutines āđāļĄāļ·āđāļāđāļāđāđāļāļāđāļāļĨ āļāļąāļāļāļąāļāļāļēāļŠāļēāļĄāļēāļĢāļāļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļāļŦāļĨāļļāļĄāļāļĢāļēāļāļāļąāđāļ§āđāļāļāļāļāđāļĄāđāļāļĨāļŦāļāđāļ§āļĒāļāļ§āļēāļĄāļāļģāļāļĩāđāđāļāđāļĢāđāļ§āļĄāļāļąāļ āđāļĨāļ°āļĨāļāđāļāļāļēāļŠāļāļāļāļāļēāļĢāđāļĒāđāļāļāļīāļāļāđāļāļĄāļđāļĨāđāļĨāļ°āļāļąāļāļŦāļēāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄāļāļĢāđāļāļĄāļāļąāļāļāļ·āđāļāđ āđāļāļ·āđāļāđāļāđāļāļāļąāļ§āļāļĒāđāļēāļ āđāļŦāđāļāļīāļāļēāļĢāļāļēāļāļąāļ§āļāļĒāđāļēāļāļāđāļāđāļāļāļĩāđāļāļķāđāļāļāļąāļāļāđāļāļąāļāļāļĩāđāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļŠāļāļāļāļąāļāļāđāļāļąāļāļāļ°āļĢāļ§āļĄāļāļāļāđāļāļĢāļ°āļāļāļāļāļāļāļŠāļāļāļŠāđāļ§āļāđāļĨāļ°āđāļāđāļāļāļĨāļĨāļąāļāļāđāđāļ§āđāđāļāļāļąāļ§āđāļāļĢāļāļĩāđāđāļāđāļĢāđāļ§āļĄāļāļąāļ:
func sumSlice(slice []int, result *int) { sum := 0 for _, value := range slice { sum += value } *result = sum } func main() { slice1 := []int{1, 2, 3, 4, 5} slice2 := []int{6, 7, 8, 9, 10} sharedResult := 0 go sumSlice(slice1, &sharedResult) go sumSlice(slice2, &sharedResult) time.Sleep(1 * time.Second) fmt.Println("Result:", sharedResult) }
āļāļąāļ§āļāļĒāđāļēāļāļāđāļēāļāļāđāļāļĄāļĩāđāļāļ§āđāļāđāļĄāļāļĩāđāļāļ°āđāļāļīāļāļāļēāļĢāđāļĒāđāļāļāļīāļāļāđāļāļĄāļđāļĨ āđāļāļ·āđāļāļāļāļēāļ goroutine āļāļąāđāļāļŠāļāļāđāļāļĩāļĒāļāđāļāļĒāļąāļāļāļģāđāļŦāļāđāļāļŦāļāđāļ§āļĒāļāļ§āļēāļĄāļāļģāļāļĩāđāđāļāđāļĢāđāļ§āļĄāļāļąāļāđāļāļĩāļĒāļ§āļāļąāļ āļāđāļ§āļĒāļāļēāļĢāđāļāđāļāđāļāļāļāļēāļ āļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāļāļ°āļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āļāļĢāļēāļĻāļāļēāļāļāļąāļāļŦāļēāļāļąāļāļāļĨāđāļēāļ§:
func sumSlice(slice []int, ch chan int) { sum := 0 for _, value := range slice { sum += value } ch <- sum } func main() { slice1 := []int{1, 2, 3, 4, 5} slice2 := []int{6, 7, 8, 9, 10} ch := make(chan int) go sumSlice(slice1, ch) go sumSlice(slice2, ch) result1 := <-ch result2 := <-ch fmt.Println("Result:", result1 + result2) }
āļāđāļ§āļĒāļāļēāļĢāđāļāđāļāļļāļāļŠāļĄāļāļąāļāļīāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļāļāļąāļ§āļāļāļ Go āļāļąāļāļāļąāļāļāļēāļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļĩāđāļāļĢāļāļāļĨāļąāļāđāļĨāļ°āļāļĢāļąāļāļāļāļēāļāđāļāđāļāļĒāđāļēāļāļāđāļēāļĒāļāļēāļĒ āļāđāļ§āļĒāļāļēāļĢāđāļāđ goroutines āđāļĨāļ°āļāđāļāļāļŠāļąāļāļāļēāļ āļāļ§āļāđāļāļēāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļļāļĄāļĻāļąāļāļĒāļ āļēāļāļāļāļāļŪāļēāļĢāđāļāđāļ§āļĢāđāļŠāļĄāļąāļĒāđāļŦāļĄāđāđāļāđāļāļĒāđāļēāļāđāļāđāļĄāļāļĩāđ āđāļāļāļāļ°āļāļĩāđāļĢāļąāļāļĐāļēāļĢāļŦāļąāļŠāļāļĩāđāļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āļŠāļ§āļĒāļāļēāļĄ āļāļĩāđ AppMaster āļ āļēāļĐāļē Go āļāđāļ§āļĒāđāļŦāđāļāļąāļāļāļąāļāļāļēāļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļ āđāļāļāļāļĨāļīāđāļāļāļąāļāđāļāđāļāđāļāļāļāđ āļāđāļ§āļĒāļ āļēāļ āđāļāļĒāđāļŠāļĢāļīāļĄāļāđāļ§āļĒāļāļēāļĢāļŠāļĢāđāļēāļāļāļāļĢāđāļŠāđāļāđāļāļāļąāļāđāļāļĄāļąāļāļīāđāļāļ·āđāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļĨāļ°āļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāđāļāļāļēāļĢāļāļĢāļąāļāļāļāļēāļāļĢāļ°āļāļąāļāļŠāļđāļāļŠāļļāļ
āļĢāļđāļāđāļāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļąāđāļ§āđāļāđāļ Go
āļĢāļđāļāđāļāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļāđāļāļ§āļīāļāļĩāđāļāđāļāļąāļāļŦāļēāļāļĩāđāđāļāđāļāđāļģāđāļāđāļŠāļģāļŦāļĢāļąāļāļāļąāļāļŦāļēāļāļąāđāļ§āđāļāļāļĩāđāđāļāļīāļāļāļķāđāļāļāļāļ°āļāļāļāđāļāļāđāļĨāļ°āđāļāđāļāļēāļāļāļāļāļāđāđāļ§āļĢāđāļāļĢāđāļāļĄāļāļąāļ āđāļāļŠāđāļ§āļāļāļĩāđ āđāļĢāļēāļāļ°āļŠāļģāļĢāļ§āļāļĢāļđāļāđāļāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļĩāđāđāļāđāļāļāļĩāđāļāļīāļĒāļĄāļĄāļēāļāļāļĩāđāļŠāļļāļāđāļ Go āļĢāļ§āļĄāļāļķāļ fan-in/fan-out, worker pools, āđāļāļāđāđāļĨāļāđ āđāļĨāļ°āļāļ·āđāļāđ
āļāļąāļāļĨāļĄāđāļāđāļē/āļāļąāļāļĨāļĄāļāļāļ
āļĢāļđāļāđāļāļ fan-in/fan-out āļāļ°āđāļāđāđāļĄāļ·āđāļāļāļļāļāļĄāļĩāļŦāļĨāļēāļĒāļāļēāļāļāļĩāđāļŠāļĢāđāļēāļāļāđāļāļĄāļđāļĨ (fan-out) āļāļēāļāļāļąāđāļāļĄāļĩāļāļēāļāđāļāļĩāļĒāļ§āļāļĩāđāđāļāđāļāđāļāļĄāļđāļĨāļāļēāļāļāļēāļāđāļŦāļĨāđāļēāļāļąāđāļ (fan-in) āđāļ Go āļāļļāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļĢāļđāļāđāļāļāļāļĩāđāđāļāļĒāđāļāđ goroutines āđāļĨāļ°āļāđāļāļ āļŠāđāļ§āļāļāļĢāļ°āļāļēāļĒāļāļāļāļāļđāļāļŠāļĢāđāļēāļāļāļķāđāļāđāļāļĒāļāļēāļĢāđāļāļīāļāđāļāđ goroutine āļŦāļĨāļēāļĒāļĢāļēāļĒāļāļēāļĢāđāļāļ·āđāļāļŠāļĢāđāļēāļāļāđāļāļĄāļđāļĨ āđāļĨāļ°āļŠāđāļ§āļāļāļĢāļ°āļāļēāļĒāđāļāđāļēāļāļđāļāļŠāļĢāđāļēāļāļāļķāđāļāđāļāļĒāļāļēāļĢāđāļāđāļāđāļāļĄāļđāļĨāđāļāļĒāđāļāđāļāđāļāļāļŠāļąāļāļāļēāļāđāļāļĩāļĒāļ§ ``` go func FanIn(āļāđāļāļ ...<-chan int) <-chan int { var wg sync.WaitGroup out := make(chan int) wg.Add(len(channels)) for _, c := range āļāđāļāļ { go func(ch <-chan int) { for n := range ch { out <- n } wg.Done() }(c) } go func() { wg.Wait() close(out) }( ) āļāļĨāļąāļāļāļāļāđāļ } ```
āļāļđāļĨāļāļāļāļēāļ
āļāļđāļĨāļāļđāđāļāļāļīāļāļąāļāļīāļāļēāļāļāļ·āļāļāļļāļāļāļāļ goroutines āļāļĩāđāļāļģāđāļāļīāļāļāļēāļāđāļāļĩāļĒāļ§āļāļąāļāļāļĢāđāļāļĄāļāļąāļ āđāļāļĒāļāļĢāļ°āļāļēāļĒāļ āļēāļĢāļ°āļāļēāļāļĢāļ°āļŦāļ§āđāļēāļāļāļąāļ āļĢāļđāļāđāļāļāļāļĩāđāđāļāđāđāļāļ·āđāļāļāļģāļāļąāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļ āļāļąāļāļāļēāļĢāļāļĢāļąāļāļĒāļēāļāļĢ āđāļĨāļ°āļāļ§āļāļāļļāļĄāļāļģāļāļ§āļ goroutines āļāļĩāđāđāļĢāļĩāļĒāļāđāļāđāļāļēāļ āđāļ Go āļāļļāļāļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāļāļĨāļļāđāļĄāļāļđāđāļāļāļīāļāļąāļāļīāļāļēāļāđāļāļĒāđāļāđ goroutines āļāđāļāļ āđāļĨāļ°āļāļĩāļĒāđāđāļ§āļīāļĢāđāļ 'range' āļĢāđāļ§āļĄāļāļąāļ ``` go func WorkerPool(worker int, āļāļēāļ <-chan āļāļēāļ, āļāļĨāļĨāļąāļāļāđ chan<- āļāļĨāļĨāļąāļāļāđ) { for i := 0; āļāļąāļ < āļāļāļāļēāļ; i++ { go func() { āļŠāļģāļŦāļĢāļąāļāļāļēāļ := range āļāļēāļ { āļāļĨāļĨāļąāļāļāđ <- job.Execute() } }() } } ```
āļāđāļāļŠāđāļ
āļĢāļđāļāđāļāļāđāļāļāđāđāļĨāļāđāļāļ·āļāļŦāđāļ§āļāđāļāđāļāļāļāļāļēāļāļāļĩāđāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨāļāļēāļĄāļĨāļģāļāļąāļ āđāļāļĒāđāļāđāļĨāļ°āļāļēāļāļāļ°āļŠāđāļāđāļāļēāļāđāļāļļāļāđāļāļĒāļąāļāļāļēāļāļāļąāļāđāļāđāļāđāļāļāļīāļāļāļļāļ āđāļ Go āļĢāļđāļāđāļāļāđāļāļāđāđāļĨāļāđāļŠāļēāļĄāļēāļĢāļāļāļģāđāļāđāļāđāđāļāđāđāļāļĒāđāļāđāļāļļāļāļāļāļāļāđāļāļāļŠāļąāļāļāļēāļāđāļāļ·āđāļāļŠāđāļāļāđāļēāļāļāđāļāļĄāļđāļĨāļĢāļ°āļŦāļ§āđāļēāļ goroutines āđāļāļĒ goroutine āļŦāļāļķāđāļāļāļąāļāļāļģāļŦāļāđāļēāļāļĩāđāđāļāđāļāļŠāđāļāļāđāļāđāļāļāđāđāļĨāļāđ ``` go func āđāļāļāđāđāļĨāļāđ (āļāļīāļāļāļļāļ <-chan Data) <-chan āļāļĨāļĨāļąāļāļāđ { stage1 := stage1(input) stage2 := stage2(stage1) return stage3(stage2) } ```
āļāļēāļĢāļāļģāļāļąāļāļāļąāļāļĢāļē
āļāļēāļĢāļāļģāļāļąāļāļāļąāļāļĢāļēāđāļāđāļāđāļāļāļāļīāļāļāļĩāđāđāļāđāđāļāļāļēāļĢāļāļ§āļāļāļļāļĄāļāļąāļāļĢāļēāļāļĩāđāđāļāļāļāļĨāļīāđāļāļāļąāļāđāļāđāļāļĢāļąāļāļĒāļēāļāļĢāļŦāļĢāļ·āļāļāļģāđāļāļīāļāļāļēāļĢāļāļēāļāļāļĒāđāļēāļ āļŠāļīāđāļāļāļĩāđāļĄāļĩāļāļĢāļ°āđāļĒāļāļāđāđāļāļāļēāļĢāļāļąāļāļāļēāļĢāļāļĢāļąāļāļĒāļēāļāļĢāđāļĨāļ°āļāđāļāļāļāļąāļāļĢāļ°āļāļāđāļāđāļ§āļāļĢāđāđāļŦāļĨāļ āđāļ Go āļāļļāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļēāļĢāļāļģāļāļąāļāļāļąāļāļĢāļēāđāļāļĒāđāļāđ time.Ticker āđāļĨāļ°āļāļģāļŠāļąāđāļ 'select' ``` go func RateLimiter(requests <-chan Request, rate time.Duration) <-chan Response { limit := time.NewTicker(rate) responses := make(chan Response) go func() { defer close(responses) āļŠāļģāļŦāļĢāļąāļ req := āļāļģāļāļāļāđāļ§āļ { <-limit.C āļāļēāļĢāļāļāļāļŠāļāļāļ <- req.Process() } }() āļŠāđāļāļāļ·āļāļāļēāļĢāļāļāļāļŠāļāļāļ } ```
āļĢāļđāļāđāļāļāļāļēāļĢāļĒāļāđāļĨāļīāļāđāļĨāļ°āļŦāļĄāļāđāļ§āļĨāļē
āđāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļ āļāļēāļāļĄāļĩāļāļēāļāļŠāļāļēāļāļāļēāļĢāļāđāļāļĩāđāļāļļāļāļāđāļāļāļāļēāļĢāļĒāļāđāļĨāļīāļāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāļŦāļĢāļ·āļāļāļąāđāļāļāđāļēāļāļēāļĢāļŦāļĄāļāđāļ§āļĨāļēāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāđāļŦāđāđāļŠāļĢāđāļāļŠāļīāđāļ Go āļāļģāđāļŠāļāļāđāļāđāļāđāļāļāļāļĢāļīāļāļ āļāļķāđāļāļāđāļ§āļĒāđāļŦāđāļāļļāļāļāļąāļāļāļēāļĢāļ§āļāļāļĢāļāļĩāļ§āļīāļāļāļāļ goroutine āļāļģāđāļŦāđāļŠāļēāļĄāļēāļĢāļāļŠāđāļāļŠāļąāļāļāļēāļāđāļŦāđāļĒāļāđāļĨāļīāļ āļāļģāļŦāļāļāđāļŠāđāļāļāļēāļĒ āļŦāļĢāļ·āļāđāļāļāļāđāļēāļāļĩāđāļāļ°āđāļāđāļāļāļąāļāļāđāļēāļāđāļŠāđāļāļāļēāļāļāļēāļĢāđāļāļĢāđāļĒāļ ``` go func WithTimeout(ctx context.Context, Duration time.Duration, task func() error) āļāđāļāļāļīāļāļāļĨāļēāļ { ctx, cancel := context.WithTimeout(ctx, Duration) defer cancel() done := make(chan error, 1) go func() { āđāļŠāļĢāđāļāļŠāļīāđāļ <- āļāļēāļ () }() āđāļĨāļ·āļāļ { āļāļĢāļāļĩ <-ctx.Done(): āļāļĨāļąāļ ctx.Err() āļāļĢāļāļĩ err := <-done: āļāļĨāļąāļ err } } ```

āļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļāļīāļāļāļĨāļēāļāđāļĨāļ°āļāļēāļĢāļāļđāđāļāļ·āļāđāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļ
āļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļāļīāļāļāļĨāļēāļāđāļĨāļ°āļāļēāļĢāļāļđāđāļāļ·āļāđāļāđāļāļāļāļāđāļāļĢāļ°āļāļāļāļŠāļģāļāļąāļāļāļāļāđāļāļĢāđāļāļĢāļĄāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļĩāđāļāļĢāļāļāļĨāļąāļ āđāļāļ·āđāļāļāļāļēāļāļāđāļ§āļĒāđāļŦāđāđāļāļĢāđāļāļĢāļĄāļāļāļāļŠāļāļāļāļāđāļāļŠāļāļēāļāļāļēāļĢāļāđāļāļĩāđāđāļĄāđāļāļēāļāļāļīāļāđāļĨāļ°āļāļģāđāļāļīāļāļāļēāļĢāļāđāļāđāļāđāļāļĨāļąāļāļĐāļāļ°āļāļĩāđāļĄāļĩāļāļēāļĢāļāļ§āļāļāļļāļĄ āđāļāļŠāđāļ§āļāļāļĩāđ āđāļĢāļēāļāļ°āļāļđāļāļāļķāļāļ§āļīāļāļĩāļāļąāļāļāļēāļĢāļāļąāļāļāđāļāļāļīāļāļāļĨāļēāļāđāļāđāļāļĢāđāļāļĢāļĄ Go āļāļĩāđāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļ āđāļĨāļ°āļ§āļīāļāļĩāļāļđāđāļāļ·āļāļāļēāļāļāļ§āļēāļĄāļāļ·āđāļāļāļĢāļ°āļŦāļāļāđāļ goroutines
āļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļāļīāļāļāļĨāļēāļāđāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļ
- āļŠāđāļāļāđāļāļāļīāļāļāļĨāļēāļāļāđāļēāļāļāđāļāļāļŠāļąāļāļāļēāļ : āļāļļāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļāđāļāļāđāļāļ·āđāļāļŠāđāļāļāđāļēāļāđāļāļāļīāļāļāļĨāļēāļāļĢāļ°āļŦāļ§āđāļēāļ goroutines āđāļĨāļ°āļāļĨāđāļāļĒāđāļŦāđāļāļđāđāļĢāļąāļāļāļąāļāļāļēāļĢāļāļēāļĄāļāļąāđāļ ``` go func worker(āļāļēāļ <-chan int, āļāļĨāļĨāļąāļāļāđ chan<- int, errs chan<- error) { āļŠāļģāļŦāļĢāļąāļāļāļēāļ := āļāļēāļāļāđāļ§āļ { res, err := āļāļĢāļ°āļāļ§āļāļāļēāļĢ(āļāļēāļ) if err != nil { errs < - err āļāļģāđāļāļīāļāļāļēāļĢāļāđāļ } āļāļĨāļĨāļąāļāļāđ <- res } } ```
- āđāļāđāļāļģāļŠāļąāđāļ 'āđāļĨāļ·āļāļ' : āđāļĄāļ·āđāļāļĢāļ§āļĄāļāđāļāļĄāļđāļĨāđāļĨāļ°āļāđāļāļāļāđāļāļāļīāļāļāļĨāļēāļ āļāļļāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļģāļŠāļąāđāļ 'āđāļĨāļ·āļāļ' āđāļāļ·āđāļāļāļąāļāļŦāļĨāļēāļĒāļāđāļāļāđāļĨāļ°āļāļģāđāļāļīāļāļāļēāļĢāļāļēāļĄāļāđāļēāļāļĩāđāđāļāđāļĢāļąāļ ``` āđāļāđāļĨāļ·āļāļ { case res := <-results: fmt.Println("Result:", res) case err := <-errs: fmt.Println("Error:", err) } ```
āļāļēāļĢāļāļđāđāļāļ·āļāļāļēāļāļāļ§āļēāļĄāļāļ·āđāļāļāļĢāļ°āļŦāļāļāđāļ Goroutines
āļŦāļēāļāļāđāļāļāļāļēāļĢāļāļ·āđāļāļāļąāļ§āļāļēāļāļāļ§āļēāļĄāļāļ·āđāļāļāļĢāļ°āļŦāļāļāđāļ goroutine āļāļļāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļĩāļĒāđāđāļ§āļīāļĢāđāļ 'defer' āļāļĢāđāļāļĄāļāļąāļāļāļąāļāļāđāļāļąāļāļāļēāļĢāļāļđāđāļāļ·āļāļāļĩāđāļāļģāļŦāļāļāđāļāļāđāļāđ āļāļąāļāļāđāļāļąāļāļāļĩāđāļāļ°āļāļģāļāļēāļāđāļĄāļ·āđāļ goroutine āļāļ·āđāļāļāļĢāļ°āļŦāļāļ āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļāļāđāļ§āļĒāļāļļāļāļāļąāļāļāļēāļĢāđāļĨāļ°āļāļąāļāļāļķāļāļāđāļāļāļīāļāļāļĨāļēāļāđāļāđāļāļĒāđāļēāļāļŠāļāđāļēāļāļēāļĄ ``` go func workerSafe() { āđāļĨāļ·āđāļāļ func() { āļāđāļē r := āļāļđāđāļāļ·āļ(); r != āđāļĄāđāļĄāļĩ { fmt.Println("Recovered from:", r) } }() // goroutine code here } ```
āļāļēāļĢāđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļāļ·āđāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ
āļāļēāļĢāļāļĢāļąāļāļāļĢāļļāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļ Go āļŠāđāļ§āļāđāļŦāļāđāđāļāļĩāđāļĒāļ§āļāđāļāļāļāļąāļāļāļēāļĢāļāđāļāļŦāļēāļāļ§āļēāļĄāļŠāļĄāļāļļāļĨāļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄāļāļāļāļāļēāļĢāđāļāđāļāļĢāļąāļāļĒāļēāļāļĢāđāļĨāļ°āļāļēāļĢāđāļāđāļāļĢāļ°āđāļĒāļāļāđāļŠāļđāļāļŠāļļāļāļāļēāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļāļāļŪāļēāļĢāđāļāđāļ§āļĢāđ āļāđāļāđāļāļāļĩāđāđāļāđāļāđāļāļāļāļīāļāļāļēāļāļāļĒāđāļēāļāļāļĩāđāļāļļāļāļŠāļēāļĄāļēāļĢāļāđāļāđāđāļāļ·āđāļāđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļēāļĢāļāļģāļāļēāļāļāļāļāđāļāļĢāđāļāļĢāļĄ Go āļāļĢāđāļāļĄāļāļąāļāļāļāļāļāļļāļ:
- āļāļĢāļąāļāđāļāđāļāļāļģāļāļ§āļ goroutines : āļāļģāļāļ§āļ goroutines āļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄāļāļķāđāļāļāļĒāļđāđāļāļąāļāļāļĢāļāļĩāļāļēāļĢāđāļāđāļāļēāļāđāļāļāļēāļ°āļāļāļāļāļļāļāđāļĨāļ°āļāđāļāļāļģāļāļąāļāļāļāļāļŪāļēāļĢāđāļāđāļ§āļĢāđāļāļāļāļāļļāļ āļāļāļĨāļāļāļāđāļ§āļĒāļāđāļēāļāđāļēāļāđ āđāļāļ·āđāļāļŦāļēāļāļģāļāļ§āļ goroutine āļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄāļāļĩāđāļŠāļļāļāļŠāļģāļŦāļĢāļąāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļāļāļāļļāļ
- āđāļāđāđāļāļāđāļāļĨāđāļāļāļāļąāļāđāļāļāļĢāđ : āļāļēāļĢāđāļāđāđāļāļāđāļāļĨāđāļāļāļāļąāļāđāļāļāļĢāđāļŠāļēāļĄāļēāļĢāļāđāļāļīāđāļĄāļāļĢāļđāļāļļāļāļāļāļāļāļēāļāļāļĢāđāļāļĄāļāļąāļ āļāļģāđāļŦāđāļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļĨāļ°āđāļāđāļāđāļāļĄāļđāļĨāđāļāđāļĄāļēāļāļāļķāđāļāđāļāļĒāđāļĄāđāļāđāļāļāļĢāļāļāļēāļĢāļāļīāļāđāļāļĢāđāļāļāđ
- āđāļāđāļāļēāļĢāļāļģāļāļąāļāļāļąāļāļĢāļē : āļāļēāļĢāđāļāđāļāļēāļĢāļāļģāļāļąāļāļāļąāļāļĢāļēāđāļāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāļĩāđāđāļāđāļāļĢāļąāļāļĒāļēāļāļĢāļĄāļēāļāļŠāļēāļĄāļēāļĢāļāļāđāļ§āļĒāļāļ§āļāļāļļāļĄāļāļēāļĢāđāļāđāļāļĢāļąāļāļĒāļēāļāļĢāđāļĨāļ°āļāđāļāļāļāļąāļāļāļąāļāļŦāļē āđāļāđāļ āļāļēāļĢāđāļāđāđāļĒāđāļ āļāļēāļĢāļŦāļĒāļļāļāļāļ°āļāļąāļ āđāļĨāļ°āļāļēāļĢāđāļāđāļ§āļāļĢāđāđāļŦāļĨāļāļāļāļāļĢāļ°āļāļ
- āđāļāđāļāļēāļĢāđāļāļ : āļāļĨāļĨāļąāļāļāđāļāļēāļāļāļēāļĢāļāļģāļāļ§āļāđāļāļāļāļĩāđāļĄāļĩāļāļēāļĢāđāļāđāļēāļāļķāļāļāđāļāļĒ āļĨāļāļāļēāļĢāļāļģāļāļ§āļāļāļĩāđāļāđāļģāļāđāļāļāđāļĨāļ°āļāļĢāļąāļāļāļĢāļļāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļāļĒāļĢāļ§āļĄāļāļāļāđāļāļĢāđāļāļĢāļĄāļāļāļāļāļļāļ
- āļŠāļĢāđāļēāļāđāļāļĢāđāļāļĨāđāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļāļāļāļļāļ : āļŠāļĢāđāļēāļāđāļāļĢāđāļāļĨāđāđāļāļāļāļĨāļīāđāļāļāļąāļ Go āļāļāļāļāļļāļāđāļāļĒāđāļāđāđāļāļĢāļ·āđāļāļāļĄāļ·āļāđāļāđāļ pprof āđāļāļ·āđāļāļĢāļ°āļāļļāđāļĨāļ°āđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļāļāļ§āļāļāļāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļĨāļ°āļāļēāļāļāļĩāđāđāļāđāļāļĢāļąāļāļĒāļēāļāļĢ
- āđāļāđāļāļĢāļ°āđāļĒāļāļāđāļāļēāļ AppMaster āļŠāļģāļŦāļĢāļąāļāđāļāļāļāļĨāļīāđāļāļāļąāļāđāļāđāļāđāļāļāļāđ : āđāļĄāļ·āđāļāđāļāđāđāļāļĨāļāļāļāļĢāđāļĄ AppMaster āđāļāļāđāļĄāđāļĄāļĩāđāļāđāļ āļāļļāļāļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļāļāļāļĨāļīāđāļāļāļąāļāđāļāđāļāđāļāļāļāđāļāļĩāđāđāļāđāļāļĢāļ°āđāļĒāļāļāđāļāļēāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāđāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļāļ Go āđāļāļ·āđāļāđāļŦāđāļĄāļąāđāļāđāļāļāļķāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļŠāļđāļāļŠāļļāļāđāļĨāļ°āļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāđāļāļāļēāļĢāļāļĢāļąāļāļāļāļēāļāļŠāļģāļŦāļĢāļąāļāđāļāļĨāļđāļāļąāļāļāļāļāļāđāđāļ§āļĢāđāļāļāļāļāļļāļ
āļāđāļ§āļĒāļāļēāļĢāđāļĢāļĩāļĒāļāļĢāļđāđāļĢāļđāļāđāļāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļĨāļ°āđāļāļāļāļīāļāļāļēāļĢāđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļŦāļĨāđāļēāļāļĩāđ āļāļļāļāļāļ°āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļĩāđāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļĩāđāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļĨāļ°āļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļŠāļđāļāđāļ Go āđāļāđāļāļĢāļ°āđāļĒāļāļāđāļāļēāļāļāļļāļāļŠāļĄāļāļąāļāļīāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļāļāļąāļ§āļāļāļ Go āļāļ§āļāļāļđāđāđāļāļāļąāļāđāļāļĨāļāļāļāļĢāđāļĄ AppMaster āļāļąāļāļāļĢāļāļāļĨāļąāļāđāļāļ·āđāļāļĒāļāļĢāļ°āļāļąāļāđāļāļĢāļāļāļēāļĢāļāļāļāļāđāđāļ§āļĢāđāļāļāļāļāļļāļāđāļŦāđāļŠāļđāļāļāļķāđāļāđāļāļāļĩāļāļāļąāđāļ
āļāļģāļāļēāļĄāļāļĩāđāļāļāļāđāļāļĒ
āļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļ Go āļŦāļĄāļēāļĒāļāļķāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļāļāđāļāļĢāđāļāļĢāļĄāđāļāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāļŦāļĨāļēāļĒāļāļēāļāļāļĢāđāļāļĄāļāļąāļ āļŦāļĢāļ·āļāļāļĒāđāļēāļāļāđāļāļĒāļāđāđāļāļ·āđāļāļāļąāļāļĢāļ°āđāļāļĩāļĒāļāļāļēāļāđāļāļĨāļąāļāļĐāļāļ°āļāļĩāđāļāļđāđāļŦāļĄāļ·āļāļāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļ Go āļĄāļĩāļāļēāļĢāļŠāļāļąāļāļŠāļāļļāļāđāļāļāļąāļ§āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄāļāļĢāđāļāļĄāļāļąāļāļāđāļēāļāļāļēāļĢāđāļāđ goroutines, channel āđāļĨāļ°āļāļģāļŠāļąāđāļ 'select'
Goroutines āđāļāđāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļĨāđāļēāļĒāđāļāļĢāļāļāļĩāđāļĄāļĩāļāđāļģāļŦāļāļąāļāđāļāļēāļāļķāđāļāļāļąāļāļāļēāļĢāđāļāļĒāļĢāļ°āļāļāļĢāļąāļāđāļāļĄāđāļāļāļ Go āļāļ§āļāđāļāļēāļĄāļāļāļ§āļīāļāļĩāļāļĩāđāļāđāļēāļĒāđāļĨāļ°āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļāļāļēāļĢāļŠāļĢāđāļēāļāđāļĨāļ°āļāļąāļāļāļēāļĢāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļąāļāļāļąāļāļŦāļĢāļ·āļāļŦāļĨāļēāļĒāļĨāđāļēāļāļāļēāļ Goroutines āļāļđāļāļŠāļĢāđāļēāļāļāļķāđāļāđāļāļĒāđāļāđāļāļĩāļĒāđāđāļ§āļīāļĢāđāļ 'go' āļāļēāļĄāļāđāļ§āļĒāļāļēāļĢāđāļĢāļĩāļĒāļāđāļāđāļāļąāļāļāđāļāļąāļ āļāļąāļ§āļāļģāļŦāļāļāđāļ§āļĨāļēāļĢāļąāļāđāļāļĄāđāļāļāļ Go āļāļ°āļāļđāđāļĨāļāļąāļāļāļēāļĢāđāļĨāļ°āļāļģāđāļāļīāļāļāļēāļĢ goroutines āļāļĢāđāļāļĄāļāļąāļ
āļāđāļāļāđāļ Go āđāļāđāđāļāļ·āđāļāļāļīāļāđāļāļĢāđāļāļāđāđāļĨāļ°āļŠāļ·āđāļāļŠāļēāļĢāļĢāļ°āļŦāļ§āđāļēāļ goroutines āļāļ§āļāđāļāļēāļĄāļĩāļ§āļīāļāļĩāđāļāļāļēāļĢāļŠāđāļāđāļĨāļ°āļĢāļąāļāļāđāļāļĄāļđāļĨāļĢāļ°āļŦāļ§āđāļēāļāļāļēāļāļāļĩāđāļāļģāļāļĢāđāļāļĄāļāļąāļ āļāļģāđāļŦāđāļĄāļąāđāļāđāļāđāļāđāļ§āđāļēāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāļāļąāđāļāļāļĨāļāļāļ āļąāļĒāđāļĨāļ°āļāļĢāļēāļĻāļāļēāļāļāļēāļĢāđāļĒāđāļāļāļīāļāļāđāļāļĄāļđāļĨ āļāđāļāļāļŠāļēāļĄāļēāļĢāļāļĒāļāđāļĨāļīāļāļāļēāļĢāļāļąāļāđāļāļāļĢāđāļŦāļĢāļ·āļāļāļąāļāđāļāļāļĢāđāđāļāđ āļāļķāđāļāļāļĒāļđāđāļāļąāļāļāļ§āļēāļĄāļāļļāļāļĩāđāļāļļāļāļĢāļ°āļāļļāđāļāļĢāļ°āļŦāļ§āđāļēāļāļāļēāļĢāļŠāļĢāđāļēāļ
āļĢāļđāļāđāļāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāļāļąāđāļ§āđāļāđāļ Go āļĢāļ§āļĄāļāļķāļāļĢāļđāļāđāļāļ fan-in/fan-out, āļāļĨāļļāđāļĄāļāļđāđāļāļāļīāļāļąāļāļīāļāļēāļ, āđāļāļāđāđāļĨāļāđ, āļāļēāļĢāļāļģāļāļąāļāļāļąāļāļĢāļē āđāļĨāļ°āļāļēāļĢāļĒāļāđāļĨāļīāļ āļĢāļđāļāđāļāļāđāļŦāļĨāđāļēāļāļĩāđāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāđāļāđāļēāļāđāļ§āļĒāļāļąāļāđāļĨāļ°āļāļĢāļąāļāđāļāđāļāđāļāļ·āđāļāļŠāļĢāđāļēāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļĢāđāļāļĄāļāļąāļāļāļĩāđāļāļĢāļāļāļĨāļąāļāđāļĨāļ°āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļ Go
āđāļ Go āļāļļāļāļŠāļēāļĄāļēāļĢāļāļāļąāļāļāļēāļĢāļāļąāļāļāđāļāļāļīāļāļāļĨāļēāļāđāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļāđāđāļāļĒāļāļēāļĢāļŠāđāļāļāđāļēāļāđāļāļāļīāļāļāļĨāļēāļāļāđāļēāļāđāļāļāđāļāļĨ āđāļāđāļāļģāļŠāļąāđāļ 'āđāļĨāļ·āļāļ' āđāļāļ·āđāļāļāļąāļāļāļēāļĢāļāļąāļāđāļŦāļĨāđāļāļāļĩāđāļĄāļēāļāļāļāļāđāļāļāļīāļāļāļĨāļēāļāļŦāļĨāļēāļĒ āđ āđāļŦāđāļ āđāļĨāļ°āđāļāđāļāļĩāļĒāđāđāļ§āļīāļĢāđāļ 'āđāļĨāļ·āđāļāļ' āļāļąāļāļāļąāļāļāđāļāļąāļāļāļēāļĢāļāļđāđāļāļ·āļāđāļāļ·āđāļāļŠāļāļąāļāļāļąāđāļāđāļĨāļ°āļāļąāļāļāļēāļĢāļāļąāļāļāļ§āļēāļĄāļāļ·āđāļāļāļĢāļ°āļŦāļāļāļāļĩāđāļāļēāļāđāļāļīāļāļāļķāđāļāđāļ goroutines .
āđāļāļ·āđāļāđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļĩāđāļāļģāļāļēāļāļāļĢāđāļāļĄāļāļąāļāđāļ Go āļāļļāļāļŠāļēāļĄāļēāļĢāļāļāļĢāļąāļāļāļģāļāļ§āļ goroutine āļāļĒāđāļēāļāļĨāļ°āđāļāļĩāļĒāļ āđāļāđāđāļāļāđāļāļĨāļāļĩāđāļāļąāļāđāļāļāļĢāđāđāļāļ·āđāļāđāļāļīāđāļĄāļāļĢāļīāļĄāļēāļāļāļēāļ āđāļāđāļāļąāļāļĢāļēāļāļĩāđāļāļģāļāļąāļāđāļāļ·āđāļāļāļ§āļāļāļļāļĄāļāļēāļĢāđāļāđāļāļĢāļąāļāļĒāļēāļāļĢ āđāļāđāļāļēāļĢāđāļāļāđāļāļ·āđāļāļĨāļāļāļēāļĢāļāļģāļāļ§āļāļāļĩāđāļāđāļģāļāđāļāļ āđāļĨāļ°āļāļģāļŦāļāļāđāļāļĢāđāļāļĨāđāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļāļāļāļļāļāđāļāļ·āđāļāļĢāļ°āļāļļāđāļĨāļ°āđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļāļāļ§āļāļāļāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āļāļāļāļāļēāļāļāļĩāđ āļāļļāļāļŠāļēāļĄāļēāļĢāļāđāļāđ AppMaster āđāļāļ·āđāļāļŠāļĢāđāļēāļāđāļāļāļāļĨāļīāđāļāļāļąāļāđāļāđāļāđāļāļāļāđāļāđāļ§āļĒāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄāļāļĢāđāļāļĄāļāļąāļāđāļ Go āđāļāļ·āđāļāđāļŦāđāļĄāļąāđāļāđāļāđāļāđāļāļķāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļĨāļ°āļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāđāļāļāļēāļĢāļāļĢāļąāļāļāļāļēāļāļĢāļ°āļāļąāļāļŠāļđāļāļŠāļļāļ


