рд▓рд░реНрдирд┐рдВрдЧ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде


рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ, рдЗрд╕рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд▓рдЧрд╛рддрд╛рд░ рдмрдврд╝ рд░рд╣реА рд╣реИ, рдЬреЛ рдХрд╛рдлреА рдЙрдЪрд┐рдд рд╣реИред рдпрд╣ рднрд╛рд╖рд╛ рд╕рд░рд▓, рддреЗрдЬ рд╣реИ рдФрд░ рдПрдХ рдорд╣рд╛рди рд╕рдореБрджрд╛рдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рднрд╛рд╖рд╛ рдХреЗ рд╕рдмрд╕реЗ рдЙрддреНрд╕реБрдХ рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЙрдбрд▓ рд╣реИред рдЗрд╕рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рдХреНрд╕ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдмрд╕ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ рдЬреЛ рдЗрди рдЖрджрд┐рдорддрд╛рдУрдВ рдХреЛ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рдЧреЛрд░реЛрдирд╛рдЗрдЯ рдФрд░ рдЪреИрдирд▓ред рдФрд░, рдЪрд┐рддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЙрдирдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдорджрдж рд╣реЛрдЧреАред

рдПрдХрд▓ рдФрд░ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо


рдЖрдк рд╕рдВрднрд╡рддрдГ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦ рдЪреБрдХреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдкрд┐рдЫрд▓реЗ рдПрдХ рдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реЛред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред

рдпрд╣ рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ - рдЕрдпрд╕реНрдХ рдЦрдирди рдХрд╛рд░реНрдпрдХреНрд░рдоред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдЕрдпрд╕реНрдХ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЦрджрд╛рди рдореЗрдВ рдореМрдЬреВрдж рдЕрдпрд╕реНрдХ рдХреЛ рддрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд╛рд░реНрдп рдЙрдиреНрд╣реЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ "рд╕рдВрд╕рд╛рдзрд┐рдд" рддрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:



рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рднреА рдХрд╛рд░реНрдп рдПрдХ рдереНрд░реЗрдб (рдЧреИрд░реА рдЧреЛрдлрд░) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреАрди рдореБрдЦреНрдп рдХрд╛рд░реНрдп: рдЦреЛрдЬ, рдЙрддреНрдкрд╛рджрди рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

func main() { theMine := [5]string{"rock", "ore", "ore", "rock", "ore"} foundOre := finder(theMine) minedOre := miner(foundOre) smelter(minedOre) } 

рдпрджрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ:

 From Finder: [ore ore ore] From Miner: [minedOre minedOre minedOre] From Smelter: [smeltedOre smeltedOre smeltedOre] 

рд╕рд░рд▓ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХ рдкреНрд▓рд╕ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдЪрд▓рд╛рдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдпрд╣рд╛рдВ рдорд▓реНрдЯреАрдереНрд░реЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреА рд╣реИред


рдЕрдпрд╕реНрдХ рдЦрдирди рдХреЗ рд▓рд┐рдП рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред рдЕрдм рдХрдИ рдереНрд░реЗрдбреНрд╕ (рдЧреЙрдлрд╝рд░реНрд╕) рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЧреИрд░реА рдХреЗрд╡рд▓ рдХрд╛рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдПрдХ рдЧреЛрдлрд░ рдЕрдпрд╕реНрдХ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рддреАрд╕рд░рд╛ рдкрд┐рдШрд▓рд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдм рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЛрдб рдореЗрдВ рджреЛ рдЪреАрдЬреЗрдВ рдЪрд╛рд╣рд┐рдП: рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЧреЛрдлрд░-рдкреНрд░реЛрд╕реЗрд╕рд░ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдЕрдпрд╕реНрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЧреЛ рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧреЛрд░рдЖрдЙрдЯ рдФрд░ рдЪреИрдирд▓ рд╣реИрдВред

Gorutiny


рдЧреЛрд░реЛрдЗрдиреНрдЯреНрд╕ рдХреЛ "рд╣рд▓реНрдХреЗ рдзрд╛рдЧреЗ" рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЧреЛрд░реЛрдЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рд▓реЙрдиреНрдЪ рдХреЛрдб рд╕реЗ рдкрд╣рд▓реЗ рдЧреЛ рдХреАрд╡рд░реНрдб рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реИ, рдЖрдЗрдП рджреЛ рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдмрдирд╛рдПрдВ, рдЙрдиреНрд╣реЗрдВ рдЧреЛ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рд╡реЗ "рдЕрдпрд╕реНрдХ" рдХреЛ рдЕрдкрдиреА рдЦрджрд╛рди рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред


 func main() { theMine := [5]string{"rock", "ore", "ore", "rock", "ore"} go finder1(theMine) go finder2(theMine) <-time.After(time.Second * 5) //       } 

рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:

 Finder 1 found ore! Finder 2 found ore! Finder 1 found ore! Finder 1 found ore! Finder 2 found ore! Finder 2 found ore! 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдРрд╕рд╛ рдХреЛрдИ рдХреНрд░рдо рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ "рдЕрдпрд╕реНрдХ рдкрд╛рддрд╛ рд╣реИ"; рдЦреЛрдЬ рдХрд╛рд░реНрдп рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрдИ рдмрд╛рд░ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдСрд░реНрдбрд░ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдЕрдм рд╣рдо рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб (рдмрд╣реБ-рдХреНрд╖реЗрддреНрд░) рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдПрдХ рдЧрдВрднреАрд░ рдкреНрд░рдЧрддрд┐ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЬрдм рд╣рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рдЧреЛрд░реЛрдЗрдирдЯреЗрдВрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ? рдЪреИрдирд▓реЛрдВ рдХреЗ рдЬрд╛рджреВ рдХрд╛ рд╕рдордп рдЖ рд░рд╣рд╛ рд╣реИред

рдЪреИрдирд▓реЛрдВ



рдЪреИрдирд▓ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд╛рдЗрдк рд╣реИ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреЛрд░реЛрдЗрдВрдЯрд┐рди рдЕрдиреНрдп рдЧреЛрд░рдЖрдЙрдЯ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЪреИрдирд▓ рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рддреАрд░ рдСрдкрд░реЗрдЯрд░ (<-) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛ рдЖрдВрджреЛрд▓рди рдХреА рджрд┐рд╢рд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

 myFirstChannel := make(chan string) myFirstChannel <- "hello" //    myVariable := <- myFirstChannel //    

рдЕрдм рд╣рдорд╛рд░реЗ рдЧреЛрдлрд░-рд╕реНрдХрд╛рдЙрдЯ рдХреЛ рдЕрдпрд╕реНрдХ рдЬрдорд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рддреБрд░рдВрдд рдЪреИрдирд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛, рдЕрдм рдЕрдпрд╕реНрдХ рдЦреЛрдЬрдХ рдФрд░ рдЦрдирд┐рдХ рдХрд╛ рдХреЛрдб рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдкрд░реЗрд╢рд╛рди рди рдХрд░реЗрдВ рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдЙрдирдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдмрд╕ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдХреАрд╡рд░реНрдб рдЧреЛ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рдЕрдкрдиреЗ рдЧреЛрд░реЛрдЗрди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЧреЛрд░реЛрдЪрди рдЕрдпрд╕реНрдХрдЪреЗрди рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рд╣рдо рдЕрдВрдд рддрдХ рдХрд░реАрдм рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред

 func main() { theMine := [5]string{тАЬore1тАЭ, тАЬore2тАЭ, тАЬore3тАЭ} oreChan := make(chan string) //   go func(mine [5]string) { for _, item := range mine { oreChan <- item // } }(theMine) //   go func() { for i := 0; i < 3; i++ { foundOre := <-oreChan // fmt.Println(тАЬMiner: Received тАЬ + foundOre + тАЬ from finderтАЭ) } }() <-time.After(time.Second * 5) //     } 

рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд┐рдиреЗрд░ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЪреИрдирд▓ рдЕрдпрд╕реНрдХ рдПрдХ рднрд╛рдЧ рд╕реЗ рддреАрди рдмрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

 Miner: Received ore1 from finder Miner: Received ore2 from finder Miner: Received ore3 from finder 

рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреЛрд░реЛрдЗрдиреЛрдВ (рдЧреЛрдлрд░реНрд╕) рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдПрдХ рдЬрдЯрд┐рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЪрд▓реЛ рдЪреИрдирд▓реЛрдВ рдХреЗ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧреБрдгреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред

рдЕрд╡рд░реБрджреНрдз


рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЬрдм рдЪреИрдирд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЧреЛрд░реЛрдЗрдирд┐рди рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЧреЛрд░реЛрдЗрдЯрд┐рди рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдпрд╛ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХреЗрдВред

рд▓реЙрдХ рд▓рд┐рдЦреЛ




рдЬрдм рдЧреЛрд░реЛрдЗрди (рдЧреЛрдлрд░) рдПрдХ рдЪреИрдирд▓ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ, рддрдм рддрдХ рдЗрд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рдЧреЛрд░реЛрдЗрди рдЪреИрдирд▓ рд╕реЗ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдкрдврд╝рддрд╛ рд╣реИред

рддрд╛рд▓рд╛ рдкрдврд╝реЗрдВ




рдХрд┐рд╕реА рдЪреИрдирд▓ рдкрд░ рд▓рд┐рдЦрддреЗ рд╕рдордп рд▓реЙрдХрд┐рдВрдЧ рдХреЗ рд╕рдорд╛рди, рдЪреИрдирд▓ рд╕реЗ рдкрдврд╝рддреЗ рд╕рдордп рдЧреЛрд░реЛрдиреЗрдЯрд┐рди рдХреЛ рд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЙрд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рддрд╛рд▓реЗ, рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рд▓рдЧрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рджреЛ рдЧреЛрд░реЛрдЗрдиреЛрдВ (gophers) рдХреЗ рдмреАрдЪ "рдкреИрд╕реЗ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг" рдХреЗ рд░реВрдк рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдПрдХ рдЧреЛрдлрд░ рдзрди рд╣рд╕реНрддрд╛рдВрддрд░рдг рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд▓реЗрдирджреЗрди рдореЗрдВ рджреВрд╕рд░реЗ рднрд╛рдЧреАрджрд╛рд░ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЪреИрдирд▓реЛрдВ рдкрд░ рдЧреЛрд░реЛрдЗрди рдХреЗ рддрд╛рд▓реЗ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЗрдП рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪреИрдирд▓реЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ: рдмрдлрд╝рд░реНрдб рдФрд░ рдЕрдирдмрд░реНрдбрд░реНрдбред рдЗрд╕ рдпрд╛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЪреБрдирдирд╛, рд╣рдо рдХрд╛рдлреА рд╣рдж рддрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЕрд╕рдВрдмрджреНрдз рдЪреИрдирд▓




рдкрд┐рдЫрд▓реЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рд╕рд┐рд░реНрдл рдРрд╕реЗ рдЪреИрдирд▓реЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рдРрд╕реЗ рдЪреИрдирд▓реЛрдВ рдкрд░, рдбреЗрдЯрд╛ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрд╡рд░реБрджреНрдз рдХреЗ рд╕рд╛рде, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ)ред

рдмрдлрд░ рдЪреИрдирд▓




рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рд╣рдореЗрд╢рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдПрдХ рдЧреЛрдлрд░ рд╕реНрдХрд╛рдЙрдЯ рдХреЛ рдЕрдпрд╕реНрдХ рдХреЗ рддреАрди рд╣рд┐рд╕реНрд╕реЗ рдорд┐рд▓реЗ, рдФрд░ рдПрдХ рдЧреЛрдлрд░ рдорд╛рдЗрдирд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкрд╛рдП рдЧрдП рднрдВрдбрд╛рд░ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдпрд╣рд╛рдВ, рдЧреЛрдлрд░ рдЯреЛрд╣реА рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдирд╣реАрдВ рдмрд┐рддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЦрдирд┐рдХ рдХреЛ рдЕрдкрдирд╛ рдХрд╛рдо рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╣рдо рдмрдлрд░ рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП 3 рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЪреИрдирд▓ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред

 bufferedChan := make(chan string, 3) 

рд╣рдо рдмрдлрд╝рд░ рдХрд┐рдП рдЧрдП рдЪреИрдирд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдХрдИ рдЯреБрдХрдбрд╝реЗ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдЧреЛрд░реЛрдЗрди рдХреЗ рд╕рд╛рде рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ред рдпрд╣ рдЕрд╕рдВрдмрджреНрдз рдЪреИрдирд▓реЛрдВ рд╕реЗ рдореБрдЦреНрдп рдЕрдВрддрд░ рд╣реИред


 bufferedChan := make(chan string, 3) go func() { bufferedChan <- "first" fmt.Println("Sent 1st") bufferedChan <- "second" fmt.Println("Sent 2nd") bufferedChan <- "third" fmt.Println("Sent 3rd") }() <-time.After(time.Second * 1) go func() { firstRead := <- bufferedChan fmt.Println("Receiving..") fmt.Println(firstRead) secondRead := <- bufferedChan fmt.Println(secondRead) thirdRead := <- bufferedChan fmt.Println(thirdRead) }() 

рдРрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдСрд░реНрдбрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:

 Sent 1st Sent 2nd Sent 3rd Receiving.. first second third 

рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдмрдлрд░ рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪреИрдирд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рдпрд╣ рднреА рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдмрдлрд░ рдЪреИрдирд▓ рд╣рдореЗрд╢рд╛ рдЖрдкрдХреЛ рдмреНрд▓реЙрдХ рд╣реЛрдиреЗ рд╕реЗ рдирд╣реАрдВ рдмрдЪрд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдХ рдЧреЛрдлрд░ рд╕реНрдХрд╛рдЙрдЯ рдПрдХ рдЧреЛрдлрд░ рдорд╛рдЗрдирд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджрд╕ рдЧреБрдирд╛ рддреЗрдЬ рд╣реИ, рдФрд░ рд╡реЗ рдПрдХ рдмрдлрд░ рдЪреИрдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ 2 рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рддреЛ рдЧреЛрдлрд░ рд╕реНрдХрд╛рдЙрдЯ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЕрдЧрд░ рдЪреИрдирд▓ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдЯрд╛ рдХреЗ рджреЛ рдЯреБрдХрдбрд╝реЗ рд╣реИрдВред

рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛


рдЗрд╕рд▓рд┐рдП, рдЧреЛрд░реЛрдЗрдЯрд┐рди рдФрд░ рдЪреИрдирд▓реЛрдВ рд╕реЗ рд▓реИрд╕, рд╣рдо рдЧреЛ рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рднреА рд▓рд╛рднреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред


 theMine := [5]string{"rock", "ore", "ore", "rock", "ore"} oreChannel := make(chan string) minedOreChan := make(chan string) //  go func(mine [5]string) { for _, item := range mine { if item == "ore" { oreChannel <- item //   oreChannel } } }(theMine) //  go func() { for i := 0; i < 3; i++ { foundOre := <-oreChannel //   oreChannel fmt.Println("From Finder: ", foundOre) minedOreChan <- "minedOre" //   minedOreChan } }() //  go func() { for i := 0; i < 3; i++ { minedOre := <-minedOreChan //   minedOreChan fmt.Println("From Miner: ", minedOre) fmt.Println("From Smelter: Ore is smelted") } }() <-time.After(time.Second * 5) //     

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрддреНрдкрд╛рджрди рд╣реЛрдЧрд╛:

 From Finder: ore From Finder: ore From Miner: minedOre From Smelter: Ore is smelted From Miner: minedOre From Smelter: Ore is smelted From Finder: ore From Miner: minedOre From Smelter: Ore is smelted 

рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рд╣реИ, рдЕрдм рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рдЧреЛрд░реЛрдЗрди рдореЗрдВред рдФрд░ рд╣рдореЗрдВ рдЪреИрдирд▓реЛрдВ рд╕реЗ рдПрдХ рдХрдиреНрд╡реЗрдпрд░ рднреА рдорд┐рд▓рд╛, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЕрдпрд╕реНрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЪреИрдирд▓реЛрдВ рдФрд░ рдЧреЛрд░реЛрдЗрдВрдЯрд┐рдВрд╕ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕рдордЭ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдореИрдВ рднрд╛рд╖рд╛ рдХреА рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЧреЛрд░реЛрдЗрдирдЯрд╛рдЗрди рдФрд░ рдЪреИрдирд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред

рдЕрдирд╛рдо рдЧреЛрд░рдЯрд┐рдиреНрд╕




рдЬреИрд╕реЗ рд╣рдо рдЧреЛрд░реЛрдЗрди рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд╣рдо рдЧреЛ рдХреАрд╡рд░реНрдб рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 //   go func() { fmt.Println("I'm running in my own go routine") }() 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЗрд╕рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдЧреЛрд░рдЖрдЙрдЯ рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЧреЛрд░реЛрдЗрди рд╣реИред




рд╣рд╛рдВ, рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЧреЛрд░реЛрдЗрди рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░, рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдиреНрдп рд╕рднреА рдЧреЛрд░рдЖрдЙрдЯ рднреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЕрдкрдиреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЯрд╛рдЗрдорд░ рдХреЙрд▓ рд░рдЦрд╛ред рдпрд╣ рдХреЙрд▓ рдПрдХ рдЪреИрдирд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ 5 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИред

 <-time.After(time.Second * 5) //       

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЪреИрдирд▓ рд╕реЗ рдкрдврд╝рддреЗ рд╕рдордп рдЧреЛрд░реЛрдЗрди рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдареАрдХ рдРрд╕рд╛ рд╣реА рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЛрдб рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЦреНрдп рдЧреЛрд░рдЖрдЙрдЯ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЕрдиреНрдп рдЧреЛрд░рдЖрдЙрдЯ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 5 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рдорд┐рд▓реЗрдЧрд╛ред рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░, рд╕рднреА рдЧреЛрд░рдЖрдЙрдЯреНрд╕ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрдХреЗрдд рдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪреИрдирд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЦреНрдп рдЧреЛрд░реЛрдЗрдЯрди рдХреЛ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╕реЗ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рдЬреИрд╕реЗ рд╣реА рдмреЗрдЯреА рдЧреЛрд░реЛрдЗрди рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддреА рд╣реИ, рдпрд╣ рдЗрд╕ рдЪреИрдирд▓ рдХреЛ рд▓рд┐рдЦрддреА рд╣реИ; рдореБрдЦреНрдп рдЧреЛрд░реЛрдЗрди рдХреЛ рдЕрдирд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред



 func main() { doneChan := make(chan string) go func() { //  -  doneChan <- тАЬI'm all done!тАЭ }() <-doneChan //        } 

рдлреЙрд░-рд░реЗрдВрдЬ рд▓реВрдк рдореЗрдВ рдПрдХ рдкрд╛рдЗрдк рд╕реЗ рдкрдврд╝реЗрдВ


рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЧреЛрдлрд╝рд░-рдЧреЗрдЯреНрдЯрд░ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдордиреЗ рдЪреИрдирд▓ рд╕реЗ рддреАрди рддрддреНрд╡реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЪреИрдирд▓ рдореЗрдВ рдХрд┐рддрдирд╛ рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдХрд▓реЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╣реА, рдлреЙрд░-рд░реЗрдВрдЬ рд▓реВрдк рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрджреНрдпрддрди рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

  //  go func() { for foundOre := range oreChan { fmt.Println(тАЬMiner: Received тАЬ + foundOre + тАЬ from finderтАЭ) } }() 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдпрд╕реНрдХ рдЦрдирдирдХрд░реНрддрд╛ рд╡рд╣ рд╕рдм рдХреБрдЫ рдкрдврд╝реЗрдЧрд╛ рдЬреЛ рд╕реНрдХрд╛рдЙрдЯ рдЙрд╕реЗ рднреЗрдЬрддрд╛ рд╣реИ, рдЪрдХреНрд░ рдореЗрдВ рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрдЧрд╛ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЪреИрдирд▓ рд╕реЗ рд╕рднреА рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЪрдХреНрд░ рдкрдврд╝рдиреЗ рдкрд░ рд▓реЙрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛; рдмреНрд▓реЙрдХ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЪреИрдирд▓ (рдЪреИрдирд▓) рдХреЛ рдмрдВрдж рдХрд░рдХреЗ рдЪреИрдирд▓ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдЪреИрдирд▓ рд░реАрдбрд┐рдВрдЧ


рдЪрдпрди-рдХреЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдкрд╛рдЗрдк рд╕реЗ рд░реАрдбрд┐рдВрдЧ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ: рдЧреЛрд░реЛрдЗрдирдЯ рдЪреИрдирд▓ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдЧрд╛, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдпрд╣ рд╡рд╣рд╛рдВ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 myChan := make(chan string) go func(){ myChan <- тАЬMessage!тАЭ }() select { case msg := <- myChan: fmt.Println(msg) default: fmt.Println(тАЬNo MsgтАЭ) } <-time.After(time.Second * 1) select { case msg := <- myChan: fmt.Println(msg) default: fmt.Println(тАЬNo MsgтАЭ) } 

рдПрдХ рдмрд╛рд░ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛:

 No Msg Message! 

рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдЪреИрдирд▓ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ


рдХрд┐рд╕реА рдЪреИрдирд▓ рдкрд░ рд▓рд┐рдЦрддреЗ рд╕рдордп рддрд╛рд▓реЗ рдХреЛ рдЙрд╕реА рдЪреБрдирд┐рдВрджрд╛ рдХреЗрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪрд▓реЛ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рдВрдкрд╛рджрди рдХрд░реЗрдВ:

 select { case myChan <- тАЬmessageтАЭ: fmt.Println(тАЬsent the messageтАЭ) default: fmt.Println(тАЬno message sentтАЭ) } 

рдЖрдЧреЗ рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ




рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓реЗрдЦ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИрдВ рдЬреЛ рдЪреИрдирд▓ рдФрд░ рдЧреЛрд░реЛрдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЕрдм, рдХреЛрдб рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдФрд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рд╕реЗ рдЕрдзрд┐рдХрддрдо рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдЪреИрдирд▓, рдЧреЛрд░реЛрдЗрдирдЯрд╛рдЗрди рдФрд░ рдмрд╣реБрд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд╛рдн рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХреА рд╣реИред

Source: https://habr.com/ru/post/hi412715/


All Articles