13 āļĄāļī.āļĒ. 2566·āļ­āđˆāļēāļ™ 1 āļ™āļēāļ—āļĩ

āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđƒāļ™ Go

āļŠāļģāļĢāļ§āļˆāļžāļĨāļąāļ‡āļ‚āļ­āļ‡āđ‚āļĄāđ€āļ”āļĨāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļ‚āļ­āļ‡ 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, Vue3 āđāļĨāļ°āđ‚āļ„āđ‰āļ”āļĄāļ·āļ­āļ–āļ·āļ­āļ—āļĩāđˆāļŠāļĢāđ‰āļēāļ‡āļ‚āļķāđ‰āļ™āđ€āļžāļ·āđˆāļ­āđ‚āļŪāļŠāļ•āđŒāđ€āļ­āļ‡āđ€āļĄāļ·āđˆāļ­āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļāļēāļĢ
āļŠāđˆāļ‡āļ­āļ­āļāđ‚āļ„āđ‰āļ”

āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđ€āļ›āđ‡āļ™āļ§āļīāļ˜āļĩāđāļāđ‰āļ›āļąāļāļŦāļēāļ—āļĩāđˆāđƒāļŠāđ‰āļ‹āđ‰āļģāđ„āļ”āđ‰āļŠāļģāļŦāļĢāļąāļšāļ›āļąāļāļŦāļēāļ—āļąāđˆāļ§āđ„āļ›āļ—āļĩāđˆāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āļ‚āļ“āļ°āļ­āļ­āļāđāļšāļšāđāļĨāļ°āđƒāļŠāđ‰āļ‡āļēāļ™āļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒāļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āđƒāļ™āļŠāđˆāļ§āļ™āļ™āļĩāđ‰ āđ€āļĢāļēāļˆāļ°āļŠāļģāļĢāļ§āļˆāļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ—āļĩāđˆāļ™āļīāļĒāļĄāļĄāļēāļāļ—āļĩāđˆāļŠāļļāļ”āđƒāļ™ 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

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™

  1. āļŠāđˆāļ‡āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļœāđˆāļēāļ™āļŠāđˆāļ­āļ‡āļŠāļąāļāļāļēāļ“ : āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļŠāđˆāļ­āļ‡āđ€āļžāļ·āđˆāļ­āļŠāđˆāļ‡āļ„āđˆāļēāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļĢāļ°āļŦāļ§āđˆāļēāļ‡ goroutines āđāļĨāļ°āļ›āļĨāđˆāļ­āļĒāđƒāļŦāđ‰āļœāļđāđ‰āļĢāļąāļšāļˆāļąāļ”āļāļēāļĢāļ•āļēāļĄāļ™āļąāđ‰āļ™ ``` go func worker(āļ‡āļēāļ™ <-chan int, āļœāļĨāļĨāļąāļžāļ˜āđŒ chan<- int, errs chan<- error) { āļŠāļģāļŦāļĢāļąāļšāļ‡āļēāļ™ := āļ‡āļēāļ™āļŠāđˆāļ§āļ‡ { res, err := āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢ(āļ‡āļēāļ™) if err != nil { errs < - err āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ•āđˆāļ­ } āļœāļĨāļĨāļąāļžāļ˜āđŒ <- res } } ```
  2. āđƒāļŠāđ‰āļ„āļģāļŠāļąāđˆāļ‡ 'āđ€āļĨāļ·āļ­āļ' : āđ€āļĄāļ·āđˆāļ­āļĢāļ§āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āļŠāđˆāļ­āļ‡āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ” āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļ„āļģāļŠāļąāđˆāļ‡ 'āđ€āļĨāļ·āļ­āļ' āđ€āļžāļ·āđˆāļ­āļŸāļąāļ‡āļŦāļĨāļēāļĒāļŠāđˆāļ­āļ‡āđāļĨāļ°āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ•āļēāļĄāļ„āđˆāļēāļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļš ``` āđ„āļ›āđ€āļĨāļ·āļ­āļ { 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 } ```

āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž

āļŠāļĢāđ‰āļēāļ‡āđ€āļ§āļīāļĢāđŒāļāđ‚āļŸāļĨāļ§āđŒāđāļšāļš pipeline
āđāļĄāđ‡āļ›āđāļ•āđˆāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāđāļšāļšāļ āļēāļž āđāļĨāđ‰āļ§āļŠāļĢāđ‰āļēāļ‡āđ‚āļ„āđ‰āļ” Go
āļŠāļĢāđ‰āļēāļ‡āđ€āļ§āļīāļĢāđŒāļāđ‚āļŸāļĨāļ§āđŒ

āļāļēāļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđƒāļ™ Go āļŠāđˆāļ§āļ™āđƒāļŦāļāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļšāļāļēāļĢāļ„āđ‰āļ™āļŦāļēāļ„āļ§āļēāļĄāļŠāļĄāļ”āļļāļĨāļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāļ‚āļ­āļ‡āļāļēāļĢāđƒāļŠāđ‰āļ—āļĢāļąāļžāļĒāļēāļāļĢāđāļĨāļ°āļāļēāļĢāđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļŠāļđāļ‡āļŠāļļāļ”āļˆāļēāļāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļ‚āļ­āļ‡āļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒ āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āđ€āļ›āđ‡āļ™āđ€āļ—āļ„āļ™āļīāļ„āļšāļēāļ‡āļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ Go āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļ‚āļ­āļ‡āļ„āļļāļ“:

  • āļ›āļĢāļąāļšāđāļ•āđˆāļ‡āļˆāļģāļ™āļ§āļ™ goroutines : āļˆāļģāļ™āļ§āļ™ goroutines āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāļ‚āļķāđ‰āļ™āļ­āļĒāļđāđˆāļāļąāļšāļāļĢāļ“āļĩāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āđ€āļ‰āļžāļēāļ°āļ‚āļ­āļ‡āļ„āļļāļ“āđāļĨāļ°āļ‚āđ‰āļ­āļˆāļģāļāļąāļ”āļ‚āļ­āļ‡āļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒāļ‚āļ­āļ‡āļ„āļļāļ“ āļ—āļ”āļĨāļ­āļ‡āļ”āđ‰āļ§āļĒāļ„āđˆāļēāļ•āđˆāļēāļ‡āđ† āđ€āļžāļ·āđˆāļ­āļŦāļēāļˆāļģāļ™āļ§āļ™ goroutine āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāļ—āļĩāđˆāļŠāļļāļ”āļŠāļģāļŦāļĢāļąāļšāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ‚āļ­āļ‡āļ„āļļāļ“
  • āđƒāļŠāđ‰āđāļŠāļ™āđ€āļ™āļĨāđāļšāļšāļšāļąāļŸāđ€āļŸāļ­āļĢāđŒ : āļāļēāļĢāđƒāļŠāđ‰āđāļŠāļ™āđ€āļ™āļĨāđāļšāļšāļšāļąāļŸāđ€āļŸāļ­āļĢāđŒāļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄāļ—āļĢāļđāļžāļļāļ•āļ‚āļ­āļ‡āļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āļ—āļģāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āđāļĨāļ°āđƒāļŠāđ‰āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰āļĄāļēāļāļ‚āļķāđ‰āļ™āđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļĢāļ­āļāļēāļĢāļ‹āļīāļ‡āđ‚āļ„āļĢāđ„āļ™āļ‹āđŒ
  • āđƒāļŠāđ‰āļāļēāļĢāļˆāļģāļāļąāļ”āļ­āļąāļ•āļĢāļē : āļāļēāļĢāđƒāļŠāđ‰āļāļēāļĢāļˆāļģāļāļąāļ”āļ­āļąāļ•āļĢāļēāđƒāļ™āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļ—āļĩāđˆāđƒāļŠāđ‰āļ—āļĢāļąāļžāļĒāļēāļāļĢāļĄāļēāļāļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ§āļĒāļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāđƒāļŠāđ‰āļ—āļĢāļąāļžāļĒāļēāļāļĢāđāļĨāļ°āļ›āđ‰āļ­āļ‡āļāļąāļ™āļ›āļąāļāļŦāļē āđ€āļŠāđˆāļ™ āļāļēāļĢāđ‚āļ•āđ‰āđāļĒāđ‰āļ‡ āļāļēāļĢāļŦāļĒāļļāļ”āļŠāļ°āļ‡āļąāļ āđāļĨāļ°āļāļēāļĢāđ‚āļ­āđ€āļ§āļ­āļĢāđŒāđ‚āļŦāļĨāļ”āļ‚āļ­āļ‡āļĢāļ°āļšāļš
  • āđƒāļŠāđ‰āļāļēāļĢāđāļ„āļŠ : āļœāļĨāļĨāļąāļžāļ˜āđŒāļˆāļēāļāļāļēāļĢāļ„āļģāļ™āļ§āļ“āđāļ„āļŠāļ—āļĩāđˆāļĄāļĩāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļšāđˆāļ­āļĒ āļĨāļ”āļāļēāļĢāļ„āļģāļ™āļ§āļ“āļ—āļĩāđˆāļ‹āđ‰āļģāļ‹āđ‰āļ­āļ™āđāļĨāļ°āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđ‚āļ”āļĒāļĢāļ§āļĄāļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļ‚āļ­āļ‡āļ„āļļāļ“
  • āļŠāļĢāđ‰āļēāļ‡āđ‚āļ›āļĢāđ„āļŸāļĨāđŒāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ‚āļ­āļ‡āļ„āļļāļ“ : āļŠāļĢāđ‰āļēāļ‡āđ‚āļ›āļĢāđ„āļŸāļĨāđŒāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™ Go āļ‚āļ­āļ‡āļ„āļļāļ“āđ‚āļ”āļĒāđƒāļŠāđ‰āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđ€āļŠāđˆāļ™ pprof āđ€āļžāļ·āđˆāļ­āļĢāļ°āļšāļļāđāļĨāļ°āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ„āļ­āļ‚āļ§āļ”āļ‚āļ­āļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āļ‡āļēāļ™āļ—āļĩāđˆāđƒāļŠāđ‰āļ—āļĢāļąāļžāļĒāļēāļāļĢ
  • āđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļ AppMaster āļŠāļģāļŦāļĢāļąāļšāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđāļšāđ‡āļāđ€āļ­āļ™āļ”āđŒ : āđ€āļĄāļ·āđˆāļ­āđƒāļŠāđ‰āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ AppMaster āđāļšāļšāđ„āļĄāđˆāļĄāļĩāđ‚āļ„āđ‰āļ” āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđāļšāđ‡āļāđ€āļ­āļ™āļ”āđŒāļ—āļĩāđˆāđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļ‚āļ­āļ‡ Go āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļĄāļąāđˆāļ™āđƒāļˆāļ–āļķāļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡āļŠāļļāļ”āđāļĨāļ°āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ›āļĢāļąāļšāļ‚āļ™āļēāļ”āļŠāļģāļŦāļĢāļąāļšāđ‚āļ‹āļĨāļđāļŠāļąāļ™āļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒāļ‚āļ­āļ‡āļ„āļļāļ“

āļ”āđ‰āļ§āļĒāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđāļĨāļ°āđ€āļ—āļ„āļ™āļīāļ„āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰ āļ„āļļāļ“āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡āđƒāļ™ Go āđƒāļŠāđ‰āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļˆāļēāļāļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđƒāļ™āļ•āļąāļ§āļ‚āļ­āļ‡ Go āļ„āļ§āļšāļ„āļđāđˆāđ„āļ›āļāļąāļšāđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ AppMaster āļ­āļąāļ™āļ—āļĢāļ‡āļžāļĨāļąāļ‡āđ€āļžāļ·āđˆāļ­āļĒāļāļĢāļ°āļ”āļąāļšāđ‚āļ„āļĢāļ‡āļāļēāļĢāļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒāļ‚āļ­āļ‡āļ„āļļāļ“āđƒāļŦāđ‰āļŠāļđāļ‡āļ‚āļķāđ‰āļ™āđ„āļ›āļ­āļĩāļāļ‚āļąāđ‰āļ™

āļ„āļģāļ–āļēāļĄāļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒ

āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđƒāļ™ Go āļ„āļ·āļ­āļ­āļ°āđ„āļĢ

āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđƒāļ™ Go āļŦāļĄāļēāļĒāļ–āļķāļ‡āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāđƒāļ™āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļŦāļĨāļēāļĒāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āļŦāļĢāļ·āļ­āļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒāļāđ‡āđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āļĢāļ°āđ€āļšāļĩāļĒāļšāļ‡āļēāļ™āđƒāļ™āļĨāļąāļāļĐāļ“āļ°āļ—āļĩāđˆāļ”āļđāđ€āļŦāļĄāļ·āļ­āļ™āļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ Go āļĄāļĩāļāļēāļĢāļŠāļ™āļąāļšāļŠāļ™āļļāļ™āđƒāļ™āļ•āļąāļ§āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļœāđˆāļēāļ™āļāļēāļĢāđƒāļŠāđ‰ goroutines, channel āđāļĨāļ°āļ„āļģāļŠāļąāđˆāļ‡ 'select'

goroutines āđƒāļ™ Go āļ„āļ·āļ­āļ­āļ°āđ„āļĢ

Goroutines āđ€āļ›āđ‡āļ™āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ„āļĨāđ‰āļēāļĒāđ€āļ˜āļĢāļ”āļ—āļĩāđˆāļĄāļĩāļ™āđ‰āļģāļŦāļ™āļąāļāđ€āļšāļēāļ‹āļķāđˆāļ‡āļˆāļąāļ”āļāļēāļĢāđ‚āļ”āļĒāļĢāļ°āļšāļšāļĢāļąāļ™āđ„āļ—āļĄāđŒāļ‚āļ­āļ‡ Go āļžāļ§āļāđ€āļ‚āļēāļĄāļ­āļšāļ§āļīāļ˜āļĩāļ—āļĩāđˆāļ‡āđˆāļēāļĒāđāļĨāļ°āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļĨāļ°āļˆāļąāļ”āļāļēāļĢāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļ™āļąāļšāļžāļąāļ™āļŦāļĢāļ·āļ­āļŦāļĨāļēāļĒāļĨāđ‰āļēāļ™āļ‡āļēāļ™ Goroutines āļ–āļđāļāļŠāļĢāđ‰āļēāļ‡āļ‚āļķāđ‰āļ™āđ‚āļ”āļĒāđƒāļŠāđ‰āļ„āļĩāļĒāđŒāđ€āļ§āļīāļĢāđŒāļ” 'go' āļ•āļēāļĄāļ”āđ‰āļ§āļĒāļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļŸāļąāļ‡āļāđŒāļŠāļąāļ™ āļ•āļąāļ§āļāļģāļŦāļ™āļ”āđ€āļ§āļĨāļēāļĢāļąāļ™āđ„āļ—āļĄāđŒāļ‚āļ­āļ‡ Go āļˆāļ°āļ”āļđāđāļĨāļˆāļąāļ”āļāļēāļĢāđāļĨāļ°āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ goroutines āļžāļĢāđ‰āļ­āļĄāļāļąāļ™

āļŠāđˆāļ­āļ‡āļ•āđˆāļēāļ‡āđ† āļŠāđˆāļ§āļĒāđƒāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ

āļŠāđˆāļ­āļ‡āđƒāļ™ Go āđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āļ‹āļīāļ‡āđ‚āļ„āļĢāđ„āļ™āļ‹āđŒāđāļĨāļ°āļŠāļ·āđˆāļ­āļŠāļēāļĢāļĢāļ°āļŦāļ§āđˆāļēāļ‡ goroutines āļžāļ§āļāđ€āļ‚āļēāļĄāļĩāļ§āļīāļ˜āļĩāđƒāļ™āļāļēāļĢāļŠāđˆāļ‡āđāļĨāļ°āļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ‡āļēāļ™āļ—āļĩāđˆāļ—āļģāļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āļ—āļģāđƒāļŦāđ‰āļĄāļąāđˆāļ™āđƒāļˆāđ„āļ”āđ‰āļ§āđˆāļēāļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢāļ™āļąāđ‰āļ™āļ›āļĨāļ­āļ”āļ āļąāļĒāđāļĨāļ°āļ›āļĢāļēāļĻāļˆāļēāļāļāļēāļĢāđāļĒāđˆāļ‡āļŠāļīāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ āļŠāđˆāļ­āļ‡āļŠāļēāļĄāļēāļĢāļ–āļĒāļāđ€āļĨāļīāļāļāļēāļĢāļšāļąāļŸāđ€āļŸāļ­āļĢāđŒāļŦāļĢāļ·āļ­āļšāļąāļŸāđ€āļŸāļ­āļĢāđŒāđ„āļ”āđ‰ āļ‚āļķāđ‰āļ™āļ­āļĒāļđāđˆāļāļąāļšāļ„āļ§āļēāļĄāļˆāļļāļ—āļĩāđˆāļ„āļļāļ“āļĢāļ°āļšāļļāđƒāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡

āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļ—āļąāđˆāļ§āđ„āļ›āđƒāļ™ Go āļĄāļĩāļ­āļ°āđ„āļĢāļšāđ‰āļēāļ‡

āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļ—āļąāđˆāļ§āđ„āļ›āđƒāļ™ Go āļĢāļ§āļĄāļ–āļķāļ‡āļĢāļđāļ›āđāļšāļš fan-in/fan-out, āļāļĨāļļāđˆāļĄāļœāļđāđ‰āļ›āļāļīāļšāļąāļ•āļīāļ‡āļēāļ™, āđ„āļ›āļ›āđŒāđ„āļĨāļ™āđŒ, āļāļēāļĢāļˆāļģāļāļąāļ”āļ­āļąāļ•āļĢāļē āđāļĨāļ°āļāļēāļĢāļĒāļāđ€āļĨāļīāļ āļĢāļđāļ›āđāļšāļšāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļŠāļēāļĄāļēāļĢāļ–āļĢāļ§āļĄāđ€āļ‚āđ‰āļēāļ”āđ‰āļ§āļĒāļāļąāļ™āđāļĨāļ°āļ›āļĢāļąāļšāđāļ•āđˆāļ‡āđ€āļžāļ·āđˆāļ­āļŠāļĢāđ‰āļēāļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļ—āļĩāđˆāļ—āļĢāļ‡āļžāļĨāļąāļ‡āđāļĨāļ°āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđƒāļ™ Go

āļ‰āļąāļ™āļˆāļ°āļˆāļąāļ”āļāļēāļĢāļāļąāļšāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđāļĨāļ°āļāļđāđ‰āļ„āļ·āļ™āļˆāļēāļāļ„āļ§āļēāļĄāļ•āļ·āđˆāļ™āļ•āļĢāļ°āļŦāļ™āļāđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ

āđƒāļ™ Go āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāļāļąāļšāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđ„āļ”āđ‰āđ‚āļ”āļĒāļāļēāļĢāļŠāđˆāļ‡āļ„āđˆāļēāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļœāđˆāļēāļ™āđāļŠāļ™āđ€āļ™āļĨ āđƒāļŠāđ‰āļ„āļģāļŠāļąāđˆāļ‡ 'āđ€āļĨāļ·āļ­āļ' āđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āļāļēāļĢāļāļąāļšāđāļŦāļĨāđˆāļ‡āļ—āļĩāđˆāļĄāļēāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļŦāļĨāļēāļĒ āđ† āđāļŦāđˆāļ‡ āđāļĨāļ°āđƒāļŠāđ‰āļ„āļĩāļĒāđŒāđ€āļ§āļīāļĢāđŒāļ” 'āđ€āļĨāļ·āđˆāļ­āļ™' āļāļąāļšāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāļāļđāđ‰āļ„āļ·āļ™āđ€āļžāļ·āđˆāļ­āļŠāļāļąāļ”āļāļąāđ‰āļ™āđāļĨāļ°āļˆāļąāļ”āļāļēāļĢāļāļąāļšāļ„āļ§āļēāļĄāļ•āļ·āđˆāļ™āļ•āļĢāļ°āļŦāļ™āļāļ—āļĩāđˆāļ­āļēāļˆāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āđƒāļ™ goroutines .

āļ‰āļąāļ™āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āđ€āļ—āļ„āļ™āļīāļ„āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļšāļšāđƒāļ”āđ€āļžāļ·āđˆāļ­āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđƒāļ™ Go āđ„āļ”āđ‰

āđ€āļžāļ·āđˆāļ­āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ—āļĩāđˆāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđƒāļ™ Go āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļ›āļĢāļąāļšāļˆāļģāļ™āļ§āļ™ goroutine āļ­āļĒāđˆāļēāļ‡āļĨāļ°āđ€āļ­āļĩāļĒāļ” āđƒāļŠāđ‰āđāļŠāļ™āđ€āļ™āļĨāļ—āļĩāđˆāļšāļąāļŸāđ€āļŸāļ­āļĢāđŒāđ€āļžāļ·āđˆāļ­āđ€āļžāļīāđˆāļĄāļ›āļĢāļīāļĄāļēāļ“āļ‡āļēāļ™ āđƒāļŠāđ‰āļ­āļąāļ•āļĢāļēāļ—āļĩāđˆāļˆāļģāļāļąāļ”āđ€āļžāļ·āđˆāļ­āļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāđƒāļŠāđ‰āļ—āļĢāļąāļžāļĒāļēāļāļĢ āđƒāļŠāđ‰āļāļēāļĢāđāļ„āļŠāđ€āļžāļ·āđˆāļ­āļĨāļ”āļāļēāļĢāļ„āļģāļ™āļ§āļ“āļ—āļĩāđˆāļ‹āđ‰āļģāļ‹āđ‰āļ­āļ™ āđāļĨāļ°āļāļģāļŦāļ™āļ”āđ‚āļ›āļĢāđ„āļŸāļĨāđŒāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ‚āļ­āļ‡āļ„āļļāļ“āđ€āļžāļ·āđˆāļ­āļĢāļ°āļšāļļāđāļĨāļ°āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ„āļ­āļ‚āļ§āļ”āļ‚āļ­āļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āļ™āļ­āļāļˆāļēāļāļ™āļĩāđ‰ āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ AppMaster āđ€āļžāļ·āđˆāļ­āļŠāļĢāđ‰āļēāļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđāļšāđ‡āļāđ€āļ­āļ™āļ”āđŒāļ”āđ‰āļ§āļĒāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđƒāļ™ Go āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļĄāļąāđˆāļ™āđƒāļˆāđ„āļ”āđ‰āļ–āļķāļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ›āļĢāļąāļšāļ‚āļ™āļēāļ”āļĢāļ°āļ”āļąāļšāļŠāļđāļ‡āļŠāļļāļ”

āļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™
āļŠāļĢāđ‰āļēāļ‡āļšāļēāļ‡āļŠāļīāđˆāļ‡āļ—āļĩāđˆ āļ™āđˆāļēāļ—āļķāđˆāļ‡

āļ—āļ”āļĨāļ­āļ‡āļāļąāļš AppMaster āļ”āđ‰āļ§āļĒāđāļœāļ™āļŸāļĢāļĩ
āđ€āļĄāļ·āđˆāļ­āļ„āļļāļ“āļžāļĢāđ‰āļ­āļĄ āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨāļ·āļ­āļāļāļēāļĢāļŠāļĄāļąāļ„āļĢāļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāđ„āļ”āđ‰

āđ€āļĢāļīāđˆāļĄ
āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđƒāļ™ Go | AppMaster