рдХрд┐рди рдЧреЛ рдбрд┐рдЬрд╛рдЗрди рд╕реНрдорд╛рд░реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЦрд░рд╛рдм рдЫ

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

рдХрдордЬреЛрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рд╣реЛ?

рдЧреЛ рд╕рд┐рдХреНрди рдзреЗрд░реИ рд╕рдЬрд┐рд▓реЛ рдЫ, рдпрддрд┐ рд╕рдЬрд┐рд▓реЛ рдЫ рдХрд┐ рдкрд░рд┐рдЪрдп рдорд▓рд╛рдИ рдПрдХ рд╕рд╛рдБрдЭ рд▓рдЧреНрдпреЛ, рддреНрдпрд╕рдкрдЫрд┐ рдореИрд▓реЗ рдЙрддреНрдкрд╛рджрдХ рд░реВрдкрдорд╛ рдХреЛрдб рдЧрд░реНрди рд╕рдХреНрдереЗрдВред рдореИрд▓реЗ рдЧреЛ рд╕рд┐рдХреНрдиреЗ рдкреБрд╕реНрддрдХ рднрдирд┐рдиреНрдЫ Go рдорд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩрдХреЛ рдкрд░рд┐рдЪрдп (рдЕрдиреБрд╡рд╛рдж), рдпреЛ рдЕрдирд▓рд╛рдЗрди рдЙрдкрд▓рдмреНрдз рдЫред рдкреБрд╕реНрддрдХ, рдЬрд╕реНрддреИ Go рд╕реНрд░реЛрдд рдХреЛрдб рдЖрдлреИрдВ, рдкрдвреНрди рд╕рдЬрд┐рд▓реЛ рдЫ, рд░рд╛рдореНрд░реЛ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдЫрдиреН, рд░ рд▓рдЧрднрдЧ 150 рдкреГрд╖реНрдард╣рд░реВ рдЫрдиреН рдЬреБрди рдПрдХреИ рдкрдЯрдХ рдкрдвреНрди рд╕рдХрд┐рдиреНрдЫред рдпреЛ рд╕рд░рд▓рддрд╛ рд╕реБрд░реБрдорд╛ рддрд╛рдЬрд╛ рд╣реБрдиреНрдЫ, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдзреЗрд░реИ рдЬрдЯрд┐рд▓ рдкреНрд░рд╡рд┐рдзрд┐рд▓реЗ рднрд░рд┐рдПрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рд╕рдВрд╕рд╛рд░рдорд╛ред рддрд░ рдЕрдиреНрддрдорд╛, рдврд┐рд▓реЛ рд╡рд╛ рдврд┐рд▓реЛ рд╡рд┐рдЪрд╛рд░ рдЙрдареНрдЫ: "рдХреЗ рдпреЛ рд╕рд╛рдБрдЪреНрдЪреИ рд╣реЛ?"

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

рддреНрдпрд╕реЛрднрдП рдХрд┐рди рдпреЛ рдпрддрд┐ рд╕рд░рд▓ рдмрдирд╛рдЗрдпреЛ? рдпрд╣рд╛рдБ рдХреЗрд╣реА рдЙрджреНрдзрд░рдгрд╣рд░реВ рдЫрдиреН рд░реЛрдм рдкрд╛рдЗрдХ (рд▓рдЧрднрдЧред: рдЧреЛ рднрд╛рд╖рд╛рдХреЛ рд╕рд╣-рдирд┐рд░реНрдорд╛рддрд╛рд╣рд░реВ рдордзреНрдпреЗ рдПрдХ):

рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдХреБрд░рд╛ рдпреЛ рд╣реЛ рдХрд┐ рд╣рд╛рдореНрд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВ (рд▓рдЧрднрдЧред: Googlers) рдЕрдиреБрд╕рдиреНрдзрд╛рдирдХрд░реНрддрд╛ рд╣реЛрдЗрдирдиреНред рддрд┐рдиреАрд╣рд░реВ, рдПрдХ рдирд┐рдпрдордХреЛ рд░реВрдкрдорд╛, рдПрдХрджрдо рдЬрд╡рд╛рди рдЫрдиреН, рдЕрдзреНрдпрдпрди рдкрдЫрд┐ рд╣рд╛рдореАрдХрд╣рд╛рдБ рдЖрдЙрдБрдЫрдиреН, рд╕рд╛рдпрдж рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдЬрд╛рднрд╛, рд╡рд╛ C/C++, рд╡рд╛ рдкрд╛рдЗрдерди рдЕрдзреНрдпрдпрди рдЧрд░реЗрдХрд╛ рдерд┐рдПред рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд░рд╛рдореНрд░реЛ рднрд╛рд╖рд╛ рдмреБрдЭреНрди рд╕рдХреНрджреИрдирдиреН, рддрд░ рдПрдХреИ рд╕рдордпрдорд╛ рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд░рд╛рдореНрд░реЛ рд╕рдлреНрдЯрд╡реЗрдпрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред рддреНрдпрд╕реИрд▓реЗ рдЙрдиреАрд╣рд░реВрдХреЛ рднрд╛рд╖рд╛ рдмреБрдЭреНрди рд░ рд╕рд┐рдХреНрди рд╕рдЬрд┐рд▓реЛ рд╣реБрдиреБрдкрд░реНрдЫред
 
рдК рдкрд░рд┐рдЪрд┐рдд рд╣реБрдиреБрдкрд░реНрдЫ, рд▓рдЧрднрдЧ рд╕реА рдЬрд╕реНрддреИ рдмреЛрд▓реНрдиреЗред Google рдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрд▓реЗ рдЖрдлреНрдиреЛ рдХрд░рд┐рдпрд░ рдЪрд╛рдБрдбреИ рд╕реБрд░реБ рдЧрд░реНрдЫрдиреН рд░ рдкреНрд░рд╛рдпрдГ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рд╣рд░реВ, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА C рдкрд░рд┐рд╡рд╛рд░рд╕рдБрдЧ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдиреНрдЫрдиреНред рдирдпрд╛рдБ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рдорд╛ рджреНрд░реБрдд рдЙрддреНрдкрд╛рджрдХрддрд╛рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рднрдиреЗрдХреЛ рднрд╛рд╖рд╛ рдзреЗрд░реИ рдХрдЯреНрдЯрд░рдкрдиреНрдереА рд╣реБрдиреБрд╣реБрдБрджреИрди рднрдиреНрдиреЗ рд╣реЛред

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

рдЕрддреНрдпрдзрд┐рдХ рд╕рд░рд▓рддрд╛ рдХреЛ рдХрд▓рд╛рдХреГрддрд┐

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

рдзреЗрд░реИ рдЕрднрд┐рд╡реНрдпрдХреНрдд рдЫреИрди

рдпрд╕рдХреЛ рд╕рд░рд▓рддрд╛рдкреНрд░рддрд┐ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдХреЛ рдХрд╛рд░рдг, Go рд╕рдБрдЧ рдЕрдиреНрдп рднрд╛рд╖рд╛рд╣рд░реВрдорд╛ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд░реВрдкрдорд╛ рдорд╛рдирд┐рдиреЗ рд╕рдВрд░рдЪрдирд╛рд╣рд░реВрдХреЛ рдЕрднрд╛рд╡ рдЫред рдпреЛ рд╕реБрд░реБрдорд╛ рд░рд╛рдореНрд░реЛ рд╡рд┐рдЪрд╛рд░ рдЬрд╕реНрддреЛ рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ, рддрд░ рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛ рдпрд╕рд▓реЗ рд╡рд░реНрдмреЛрдЬ рдХреЛрдбрдорд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдиреНрдЫред рдпрд╕рдХреЛ рдХрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рд╣реБрдиреБрдкрд░реНрджрдЫ - рдпреЛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐рдХреЛ рдХреЛрдб рдкрдвреНрди рд╕рдЬрд┐рд▓реЛ рд╣реБрдиреБ рдЖрд╡рд╢реНрдпрдХ рдЫ, рддрд░ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдпреА рд╕рд░рд▓реАрдХрд░рдгрд╣рд░реВрд▓реЗ рдорд╛рддреНрд░ рдкрдвреНрди рдпреЛрдЧреНрдпрддрд╛рд▓рд╛рдИ рд╣рд╛рдирд┐ рдкреБрд░реНтАНрдпрд╛рдЙрдБрдЫред Go рдорд╛ рдХреБрдиреИ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдкрд╣рд░реВ рдЫреИрдирдиреН: рдпрд╛ рдд рдзреЗрд░реИ рд╡рд╛ рдХреЗрд╣реА рдкрдирд┐ рдЫреИрдиред

рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдХрдиреНрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЬрд╕рд▓реЗ stdin рд╡рд╛ рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрди рдЖрд░реНрдЧреБрдореЗрдиреНрдЯрд╣рд░реВрдмрд╛рдЯ рдлрд╛рдЗрд▓ рдкрдвреНрдЫ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

package main

import (
    "bufio"
    "flag"
    "fmt"
    "log"
    "os"
)

func main() {

    flag.Parse()
    flags := flag.Args()

    var text string
    var scanner *bufio.Scanner
    var err error

    if len(flags) > 0 {

        file, err := os.Open(flags[0])

        if err != nil {
            log.Fatal(err)
        }

        scanner = bufio.NewScanner(file)

    } else {
        scanner = bufio.NewScanner(os.Stdin)
    }

    for scanner.Scan() {
        text += scanner.Text()
    }

    err = scanner.Err()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(text)
}

рдпрджреНрдпрдкрд┐ рдпреЛ рдХреЛрдбрд▓реЗ рд╕рдореНрднрд╡ рднрдПрд╕рдореНрдо рд╕рд╛рдорд╛рдиреНрдп рдмрдиреНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрдЫ, Go рдХреЛ рдЬрдмрд░рдЬрд╕реНрддреА verbosity рдмрд╛рдЯреЛрдорд╛ рд╣реБрдиреНрдЫ, рд░ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡рд░реВрдк, рд╕рд╛рдзрд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрджрд╛ рдХреЛрдбрдХреЛ рдареВрд▓реЛ рдорд╛рддреНрд░рд╛рдорд╛ рдкрд░рд┐рдгрд╛рдо рд╣реБрдиреНрдЫред

рдпрд╣рд╛рдБ, рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдорд╛ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЫ D:

import std.stdio, std.array, std.conv;

void main(string[] args)
{
    try
    {
        auto source = args.length > 1 ? File(args[1], "r") : stdin;
        auto text   = source.byLine.join.to!(string);

        writeln(text);
    }
    catch (Exception ex)
    {
        writeln(ex.msg);
    }
}

рд░ рдЕрдм рдХреЛ рдзреЗрд░реИ рдкрдвреНрди рдпреЛрдЧреНрдп рдЫ? рдо рдореЗрд░реЛ рднреЛрдЯ D рд▓рд╛рдИ рджрд┐рдиреЗрдЫреБред рдЙрд╕рдХреЛ рдХреЛрдб рдзреЗрд░реИ рдкрдвреНрди рдпреЛрдЧреНрдп рдЫ рдХрд┐рдирднрдиреЗ рдЙрд╕рд▓реЗ рдХрд╛рд░реНрдпрд╣рд░реВ рдЕрдЭ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫред D рдзреЗрд░реИ рдЬрдЯрд┐рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ (рд▓рдЧрднрдЧред: рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рдХрд╛рд░реНрдп рдХрд▓ ╨╕ рдмрд╛рдиреНрдХреА) рдЧреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛ рднрдиреНрджрд╛, рддрд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐ рддреНрдпрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡рдореИ рдХреЗрд╣рд┐ рдЬрдЯрд┐рд▓ рдЫреИрдиред

рдирдХреНрдХрд▓рдХреЛ рдирд░реНрдХ

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

package main

import "fmt"

func int64Sum(list []int64) (uint64) {
    var result int64 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int32Sum(list []int32) (uint64) {
    var result int32 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int16Sum(list []int16) (uint64) {
    var result int16 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int8Sum(list []int8) (uint64) {
    var result int8 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func main() {

    list8  := []int8 {1, 2, 3, 4, 5}
    list16 := []int16{1, 2, 3, 4, 5}
    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(int8Sum(list8))
    fmt.Println(int16Sum(list16))
    fmt.Println(int32Sum(list32))
    fmt.Println(int64Sum(list64))
}

рд░ рдпреЛ рдЙрджрд╛рд╣рд░рдгрд▓реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░рдХрд╛ рд▓рд╛рдЧрд┐ рдкрдирд┐ рдХрд╛рдо рдЧрд░реНрджреИрдиред рдпреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрд▓реЗ рдЖрдлреИрд▓рд╛рдИ рдирджреЛрд╣реЛрд░реНрдпрд╛рдЙрдиреЗ рд╕рд┐рджреНрдзрд╛рдиреНрддрд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЙрд▓реНрд▓рдЩреНрдШрди рдЧрд░реНрджрдЫ (рдбреНрд░рд╛рдИ), рд╕рдмреИрднрдиреНрджрд╛ рдкреНрд░рд╕рд┐рджреНрдз рд░ рд╕реНрдкрд╖реНрдЯ рд╕рд┐рджреНрдзрд╛рдиреНрддрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ, рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрджреИ рдЬреБрди рдзреЗрд░реИ рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рд╕реНрд░реЛрдд рд╣реЛред рдЧреЛ рдпреЛ рдХрд┐рди рдЧрд░реНрдЫ? рдпреЛ рднрд╛рд╖рд╛рдХреЛ рдбрд░рд▓рд╛рдЧреНрджреЛ рдкрдХреНрд╖ рд╣реЛред

D рдорд╛ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг:

import std.stdio;
import std.algorithm;

void main(string[] args)
{
    [1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}

рд╕рд░рд▓, рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд░ рд╕реАрдзрд╛ рдмрд┐рдиреНрджреБрдорд╛ред рдпрд╣рд╛рдБ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рдХрд╛рд░реНрдп рд╣реЛ reduce рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░рдХрд╛рд░ рд░ predicate рдХреЛ рд▓рд╛рдЧреАред рд╣реЛ, рдпреЛ рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг рднрдиреНрджрд╛ рдзреЗрд░реИ рдЬрдЯрд┐рд▓ рдЫ, рддрд░ рд╕реНрдорд╛рд░реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрд▓рд╛рдИ рдмреБрдЭреНрди рдЧрд╛рд╣реНрд░реЛ рдЫреИрдиред рдХреБрди рдЙрджрд╛рд╣рд░рдг рд░рд╛рдЦреНрди рд╕рдЬрд┐рд▓реЛ рд░ рдкрдвреНрди рд╕рдЬрд┐рд▓реЛ рдЫ?

рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдмрд╛рдЗрдкрд╛рд╕

рдо рдХрд▓реНрдкрдирд╛ рдЧрд░реНрдЫреБ рдХрд┐ рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВ рдпреЛ рдкрдвреНрджреИ рдореБрдЦрдорд╛ рдлрд┐рдБрдЬ рдЖрдЙрдиреЗрдЫрдиреН рд░ рдХрд░рд╛рдЙрдиреЗрдЫрдиреН, "рддрд┐рдореАрд▓реЗ рдпреЛ рдЧрд▓рдд рдЧрд░реНрджреИрдЫреМ!" рдард┐рдХ рдЫ, рддреНрдпрд╣рд╛рдБ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░реНрдп рд░ рдкреНрд░рдХрд╛рд░рд╣рд░реВ рдмрдирд╛рдЙрдиреЗ рдЕрд░реНрдХреЛ рддрд░рд┐рдХрд╛ рдЫ, рддрд░ рдпрд╕рд▓реЗ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реАрд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рддреЛрдбреНрдЫ!

рд╕рдорд╕реНрдпрд╛рдХреЛ рд╡рд░рд┐рдкрд░рд┐ рдХрд╛рдо рдЧрд░реНрди рдореВрд░реНрдЦ рднрд╛рд╖рд╛ рдлрд┐рдХреНрд╕рдХреЛ рдпреЛ рдЙрджрд╛рд╣рд░рдгрд▓рд╛рдИ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН:

package main

import "fmt"
import "reflect"

func Reduce(in interface{}, memo interface{}, fn func(interface{}, interface{}) interface{}) interface{} {
    val := reflect.ValueOf(in)

    for i := 0; i < val.Len(); i++ {
        memo = fn(val.Index(i).Interface(), memo)
    }

    return memo
}

func main() {

    list := []int{1, 2, 3, 4, 5}

    result := Reduce(list, 0, func(val interface{}, memo interface{}) interface{} {
        return memo.(int) + val.(int)
    })

    fmt.Println(result)
}

рдпреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди Reduce рд▓реЗрдЦрдмрд╛рдЯ рд╕рд╛рднрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ Go рдорд╛ idiomatic рдЬреЗрдиреЗрд░рд┐рдХрд╣рд░реВ (рд▓рдЧрднрдЧред: рдореИрд▓реЗ рдЕрдиреБрд╡рд╛рдж рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рди, рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рдорд╛ рдорджреНрджрдд рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ рдо рдЦреБрд╕реА рд╣реБрдиреЗрдЫреБ)ред рдард┐рдХ рдЫ, рдпрджрд┐ рдпреЛ рдореБрд╣рд╛рд╡рд░рд╛рд╡рд╛рджреА рд╣реЛ рднрдиреЗ, рдо рдЧреИрд░-рдореБрд╣рд╛рд╡рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╣реЗрд░реНрди рдШреГрдгрд╛ рдЧрд░реНрдЫреБред рдкреНрд░рдпреЛрдЧ interface{} - рдПрдХ рдкреНрд░рд╣рд╕рди, рд░ рднрд╛рд╖рд╛рдорд╛ рдпреЛ рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрд┐рдЩ рдмрд╛рдЗрдкрд╛рд╕ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛ рдПрдХ рдЦрд╛рд▓реА рдЗрдиреНрдЯрд░рдлреЗрд╕ рд╣реЛ рд░ рд╕рдмреИ рдкреНрд░рдХрд╛рд░рд▓реЗ рдпрд╕рд▓рд╛рдИ рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫ, рд╕рдмреИрдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрдг рд╕реНрд╡рддрдиреНрддреНрд░рддрд╛ рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩрдХреЛ рдпреЛ рд╢реИрд▓реА рдПрдХрджрдореИ рдХреБрд░реВрдк рдЫ, рд░ рддреНрдпреЛ рдорд╛рддреНрд░ рд╣реЛрдЗрдиред рдпреА рдЬрд╕реНрддреИ рдПрдХреНрд░реЛрдмреЗрдЯрд┐рдХ feats рд░рдирдЯрд╛рдЗрдо рдкреНрд░рддрд┐рдмрд┐рдореНрдм рдХреЛ рдкреНрд░рдпреЛрдЧ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЫред рд░реЛрдм рдкрд╛рдИрдХрд▓реЗ рдкрдирд┐ рдпреЛ рджреБрд░реБрдкрдпреЛрдЧ рдЧрд░реНрдиреЗ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрд▓рд╛рдИ рдорди рдкрд░рд╛рдЙрдБрджреИрдирдиреН, рдЬрд╕рд░реА рдЙрдирд▓реЗ рдЖрдлреНрдиреЛ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯрдорд╛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реЗред

рдпреЛ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реЛ рдЬреБрди рд╕рд╛рд╡рдзрд╛рдиреА рд╕рдВрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫред рдХрдбрд╛рдЗрдХрд╛ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдирднрдПрд╕рдореНрдо рдпрд╕рдмрд╛рдЯ рдмрдЪреНрдиреБрдкрд░реНрдЫред

рдо рдпреЛ рдмрдХрд╡рд╛рд╕рдХреЛ рд╕рдЯреНрдЯрд╛ D рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВ рд▓рд┐рдиреНрдЫреБред рдХрд╕реИрд▓реЗ рдХрд╕рд░реА рднрдиреНрди рд╕рдХреНрдЫ interface{} рдЕрдзрд┐рдХ рдкрдвреНрди рдпреЛрдЧреНрдп рд╡рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдЯрд╛рдЗрдк рдкрдирд┐?

рдирд┐рд░реНрднрд░рддрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирдХреЛ рд╕рдорд╕реНрдпрд╛

Go рд╕рдБрдЧ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рдпрдХрд╣рд░реВрдХреЛ рд╢реАрд░реНрд╖рдорд╛ рдирд┐рд░реНрдорд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдгрд╛рд▓реА рдЫ рдХреБрд▓рдкрддрд┐рдпреЛрдВред Go рд╕рдБрдЧ рдЖрдЙрдиреЗ рдЙрдкрдХрд░рдгрд╣рд░реВрд▓реЗ рдпреА рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдиреНрджрдЫрдиреН рд░ рддрд┐рдиреАрд╣рд░реВрдмрд╛рдЯ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб, рдирд┐рд░реНрдорд╛рдг рд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рдЬрдмрдХрд┐ рдпреЛ рдорд╣рд╛рди рдЫ, рддреНрдпрд╣рд╛рдБ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЧ рдПрдХ рдкреНрд░рдореБрдЦ рддреНрд░реБрдЯрд┐ рдЫ! рд╣реЛ, рдпреЛ рд╕рддреНрдп рд╣реЛ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ Go рдЙрдкрдХрд░рдгрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ github рд╡рд╛ bitbucket рдЬрд╕реНрддрд╛ рд╕реЗрд╡рд╛рд╣рд░реВрдмрд╛рдЯ рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдиред рд░ рдлреЗрд░рд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдЦрд░реНрдЪ рдорд╛ рд╕рд╛рджрдЧреАред рдо рдпрд╕реНрддреЛ рдирд┐рд░реНрдгрдпрдХреЛ рддрд░реНрдХ рдмреБрдЭреНрди рд╕рдХреНрд╖рдо рдЫреИрдиред

рдпрд╕ рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕рдорд╛рдзрд╛рдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдкреНрд░рд╢реНрди рд╕реЛрдзреЗрдкрдЫрд┐, рдЧреЛ рд╡рд┐рдХрд╛рд╕ рдЯреЛрд▓реА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдпреЛ рдлреЛрд░рдо рдереНрд░реЗрдб, рдЬрд╕рд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдпрд╕ рдореБрджреНрджрд╛рдХреЛ рд╡рд░рд┐рдкрд░рд┐ рдХрд╕рд░реА рдЬрд╛рдБрджреИрдЫрдиреН рднрдиреЗрд░ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдЧрд░реНтАНрдпреЛред рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдХреЗрд╡рд▓ рдПрдХ рджрд┐рди рддрдкрд╛рдИрдВрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрд╕рдореНрдкреВрд░реНрдг рднрдгреНрдбрд╛рд░ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдпрд╕рд▓рд╛рдИ "рдЬрд╕реНрддреИ" рдЫреЛрдбреНрдиреБрд╣реЛрд╕реНред рдХреЗ рд╕реЛрдЪреНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ? рд╣рд╛рдореАрд╕рдБрдЧ рдЙрддреНрдХреГрд╖реНрдЯ рдЯреНрдпрд╛рдЧрд┐рдЩ рд░ рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд░реНрдердирдХреЛ рд╕рд╛рде рдЕрджреНрднреБрдд рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ рдЫрдиреН рдЬреБрди Go рд╕рд┐рд░реНрдЬрдирд╛рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрдЫрдиреН рд░ рд╕реНрд░реЛрдд рдХреЛрдб рдорд╛рддреНрд░ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдЫрдиреНред

рд╕реА рдмрд╛рдЯ рд╕рд╛рдВрд╕реНрдХреГрддрд┐рдХ рд╕рд╛рдорд╛рди

рдореЗрд░реЛ рд╡рд┐рдЪрд╛рд░рдорд╛, Go рд▓рд╛рдИ рдЬреАрд╡рдирднрд░ C рдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд░ рдХреЗрд╣рд┐ рдирдпрд╛рдБ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рдирдЪрд╛рд╣реЗрдХрд╛ рдорд╛рдирд┐рд╕рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рднрд╛рд╖рд╛рд▓рд╛рдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рдЩреНрдЧреНрд░рд╛рд╣рд░реВрд╕рдБрдЧ C рдХреЛ рд░реВрдкрдорд╛ рд╡рд░реНрдгрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫредрдореВрд▓ред: рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд╛рдЩреНрдЧреНрд░рд╛рд╣рд░реВ)ред рдпрд╕рдорд╛ рдХреБрдиреИ рдирдпрд╛рдБ рд╡рд┐рдЪрд╛рд░рд╣рд░реВ рдЫреИрдирдиреН, рд╕рдорд╛рдирд╛рдиреНрддрд░рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдмрд╛рд╣реЗрдХ (рдЬреБрди, рд╡реИрд╕реЗ, рдЕрджреНрднреБрдд рдЫ) рд░ рдпреЛ рд▓рд╛рдЬрдорд░реНрджреЛ рдХреБрд░рд╛ рд╣реЛред рддрдкрд╛рдИрдВрд╕рдБрдЧ рдореБрд╢реНрдХрд┐рд▓рд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдорд┐рд▓реНрдиреЗ, рд▓рдЩреНрдЧрдбрд╛ рднрд╛рд╖рд╛рдорд╛ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдорд╛рдирд╛рдиреНрддрд░рддрд╛ рдЫред

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

рдЖрдлреНрдиреЛ рдлрд╛рдЗрджрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░рд▓рддрд╛

Go рд╕рд░рд▓ рд╣реБрди рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рд░ рдпреЛ рддреНрдпреЛ рд▓рдХреНрд╖реНрдпрдорд╛ рд╕рдлрд▓ рд╣реБрдиреНрдЫред рдпреЛ рдХрдордЬреЛрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд▓реЗрдЦрд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЯреЗрдореНрдкреНрд▓реЗрдЯрдХреЛ рд░реВрдкрдорд╛ рдкреБрд░рд╛рдиреЛ рднрд╛рд╖рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ред рдпреЛ рд╕рд╛рдзрд╛рд░рдг рдЪреАрдЬрд╣рд░реВ рдЧрд░реНрди рд╕рд░рд▓ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рд╕рд╛рде рдкреВрд░реНрдг рдЖрдЙрдБрдЫред рдпреЛ рдкрдвреНрди рд╕рдЬрд┐рд▓реЛ рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫред

рдпреЛ рд╕реНрдорд╛рд░реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрддреНрдпрдиреНрддреИ рд╢рдмреНрдж, рдкреНрд░рднрд╛рд╡рд╣реАрди, рд░ рдЦрд░рд╛рдм рдЫред

╨б╨┐╨░╤Б╨╕╨▒╨╛ mersinvald рд╕рдореНрдкрд╛рджрдирдХрд╛ рд▓рд╛рдЧрд┐

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди