рднрд╛рд╖рд╛ рдпрд╛рдВрддреНрд░рд┐рдХреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВ

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


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

рд╡рд┐рд╖рдп - рд╕реВрдЪреА:

  1. рд╕реНрдЯреИрдХ рдФрд░ рдкреЙрдЗрдВрдЯрд░реНрд╕ ( рдЕрдиреБрд╡рд╛рдж ) рдкрд░ рднрд╛рд╖рд╛ рдпрд╛рдВрддреНрд░рд┐рдХреА
  2. рдкрд▓рд╛рдпрди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рднрд╛рд╖рд╛ рдпрд╛рдВрддреНрд░рд┐рдХреА
  3. рдореЗрдореЛрд░реА рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдкрд░ рднрд╛рд╖рд╛ рдпрд╛рдВрддреНрд░рд┐рдХреА
  4. рдбреЗрдЯрд╛ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рдбрд┐рдЬрд╛рдЗрди рджрд░реНрд╢рди

рдкрд░рд┐рдЪрдп


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

рдвреЗрд░


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

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

рдмрд╛рдБрдЯрдиреЗ рдХрд╛ рдХрд╛рдо


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

рдпрд╣рд╛рдВ рдПрдХ рдвреЗрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХрд╛рд░рдг рдХрдИ рдмрд╛рд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд▓рд╛рдЗрдиреЛрдВ 2 рдФрд░ 6 рдореЗрдВ рджреЗрдЦреЗрдВред рдЖрдк рдореБрдЦреНрдп рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЗ рдЕрдВрджрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рдХреЗ рджреЛ рдмрд╛рд░ рдкрддрд╛ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦреЗрдВрдЧреЗред

play.golang.org/p/pxn5u4EBSI

рдкрд▓рд╛рдпрди рдпрд╛рдВрддреНрд░рд┐рдХреА


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

рдкрд▓рд╛рдпрди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рддрдВрддреНрд░ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

play.golang.org/p/Y_VZxYteKO

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 1

01 package main
02
03 type user struct {
04     name  string
05     email string
06 }
07
08 func main() {
09     u1 := createUserV1()
10     u2 := createUserV2()
11
12     println("u1", &u1, "u2", &u2)
13 }
14
15 //go:noinline
16 func createUserV1() user {
17     u := user{
18         name:  "Bill",
19         email: "bill@ardanlabs.com",
20     }
21
22     println("V1", &u)
23     return u
24 }
25
26 //go:noinline
27 func createUserV2() *user {
28     u := user{
29         name:  "Bill",
30         email: "bill@ardanlabs.com",
31     }
32
33     println("V2", &u)
34     return &u
35 }

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

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 1, рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдореВрд▓реНрдп рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреЙрд▓рд░ рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓реМрдЯрдиреЗ рдкрд░ рдореВрд▓реНрдп рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2

16 func createUserV1() user {
17     u := user{
18         name:  "Bill",
19         email: "bill@ardanlabs.com",
20     }
21
22     println("V1", &u)
23     return u
24 }

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

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

рдЪрд┐рддреНрд░ 1



рдЪрд┐рддреНрд░ 1 рдореЗрдВ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ createUserV1 рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рджреЛрдиреЛрдВ рдлрд╝реНрд░реЗрдореЛрдВ рдореЗрдВ рдЯрд╛рдЗрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдорд╛рди рдореМрдЬреВрдж рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 3

27 func createUserV2() *user {
28     u := user{
29         name:  "Bill",
30         email: "bill@ardanlabs.com",
31     }
32
33     println("V2", &u)
34     return &u
35 }

рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдкрд░ рдкреЙрдЗрдВрдЯрд░ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЯрд╛рдЗрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдореВрд▓реНрдп рдХреЙрд▓ рд╕реНрдЯреИрдХ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдЙрд╕ рдкрддреЗ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдорд╛рди рд╕реНрдерд┐рдд рд╣реИрдВред

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

рдЪрд┐рддреНрд░ 2



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

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

рдкрдардиреАрдпрддрд╛


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

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ createUserV2 рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 4

27 func createUserV2() *user {
28     u := user{
29         name:  "Bill",
30         email: "bill@ardanlabs.com",
31     }
32
33     println("V2", &u)
34     return &u
35 }

рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред 28 рд▓рд╛рдЗрди рдкрд░ рдШреЛрд╖рд┐рдд рдЪрд░ рдпреВ рдЯрд╛рдЗрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЧреЛ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдЖрдкрдХреЛ рдареАрдХ рд╕реЗ рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдХрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓рд╛рдЗрди 34 рдкрд░ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдХреЛ рд╣реАрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрджреНрдпрдкрд┐ рдпреВ рдЯрд╛рдЗрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдореВрд▓реНрдп рддрдХ рдкрд╣реБрдВрдЪ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреИрдХ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЪрд┐рддреНрд░ 3



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

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 5

27 func createUserV2() *user {
28     u := &user{
29         name:  "Bill",
30         email: "bill@ardanlabs.com",
31     }
32
33     println("V2", u)
34     return u
35 }

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

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 6

34     return u
35 }

рдпрд╣ рд╡рд╛рдкрд╕реА рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реА рд╣реИ? рдЙрдирдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдкрд░ рдпреВ рдХреА рдПрдХ рдХреЙрдкреА рд▓рдЧрд╛рдИ рдЧрдИ рд╣реИред рдЗрд╕ рдмреАрдЪ, рдЬрдм рдЖрдк & рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреНрдпрд╛ рд░рд┐рдЯрд░реНрди рдорд┐рд▓рддрд╛ рд╣реИ?

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 7

34     return &u
35 }

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

рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ рдкреЙрдЗрдВрдЯрд░ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдкрдардиреАрдпрддрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 8

01 var u *user
02 err := json.Unmarshal([]byte(r), &u)
03 return u, err

рдЗрд╕ рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк json.Unmarshal рдХреЛ рд▓рд╛рдЗрди 02 рдкрд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдЪрд░ рдкрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ json.Unmarshal рдХреЙрд▓ рдЯрд╛рдЗрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдореВрд▓реНрдп рдмрдирд╛рдПрдЧрд╛ рдФрд░ рдкреЙрдЗрдВрдЯрд░ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдЧрд╛ред play.golang.org/p/koI8EjpeIx

рдпрд╣ рдХреЛрдб рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИ:
01: рдЕрд╢рдХреНрдд рдорд╛рди рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкреЙрдЗрдВрдЯрд░ рдмрдирд╛рдПрдВред
02: json.Unmarshal рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╢реЗрдпрд░ рдпреВ рдЪрд░ред
03: рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░ u рдХреА рдПрдХ рдкреНрд░рддрд┐ рд▓реМрдЯрд╛рдПрдВред

рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ json.Unmarshal рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЯрд╛рдЗрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдореВрд▓реНрдп рдХреЙрд▓рд░ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдШреЛрд╖рдгрд╛ рдХреЗ рджреМрд░рд╛рди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкрдардиреАрдпрддрд╛ рдХреИрд╕реЗ рдмрджрд▓рддреА рд╣реИ?

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 9

01 var u user
02 err := json.Unmarshal([]byte(r), &u)
03 return &u, err

рдпрд╣ рдХреЛрдб рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИ:
01: рдЕрд╢рдХреНрдд рдорд╛рди рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдорд╛рди рдмрдирд╛рдПрдБред
02: json.Unmarshal рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╢реЗрдпрд░ рдпреВ рдЪрд░ред
03: рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рд╛рде рд╡реЗрд░рд┐рдПрдмрд▓ рдпреВ рдХреЛ рд╢реЗрдпрд░ рдХрд░реЗрдВред

рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред рд▓рд╛рдЗрди 02 json.Unmarshal рдореЗрдВ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЗ рдиреАрдЪреЗ рдЯрд╛рдЗрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд▓рд╛рдЗрди 03 рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдХреЙрд▓ рдХреЗ рдвреЗрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╢реЗрдпрд░ рдорд╛рди рдХреЛ рдвреЗрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ред

рдорд╛рди рдмрдирд╛рддреЗ рд╕рдордп рдорд╛рдиреЛрдВ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдорд╛рдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП & рдСрдкрд░реЗрдЯрд░ рдХреА рдкрдардиреАрдпрддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдВред

рд╕рдВрдХрд▓рдХ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ


рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдирд┐рд░реНрдгрдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рдВрдХрд▓рдХ рдХреЛ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЧреЛ рдмрд┐рд▓реНрдб рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп -m рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде -gcflags рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк -m рдХреЗ 4 рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд╛рдирдХрд╛рд░реА рдХреЗ 2 рд╕реНрддрд░реЛрдВ рдХреЗ рдмрд╛рдж рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ 2 рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛ -m

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 10

$ go build -gcflags "-m -m"
./main.go:16: cannot inline createUserV1: marked go:noinline
./main.go:27: cannot inline createUserV2: marked go:noinline
./main.go:8: cannot inline main: non-leaf function
./main.go:22: createUserV1 &u does not escape
./main.go:34: &u escapes to heap
./main.go:34:     from ~r0 (return) at ./main.go:34
./main.go:31: moved to heap: u
./main.go:33: createUserV2 &u does not escape
./main.go:12: main &u1 does not escape
./main.go:12: main &u2 does not escape

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдорд╛рди рдХреЛ рдвреЗрд░ рдореЗрдВ рдбрдВрдк рдХрд░рдиреЗ рдХреЗ рдлреИрд╕рд▓реЗ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, createUserV1 рдФрд░ createUserV2 рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рддрд╛рдЬрд╝рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 13

16 func createUserV1() user {
17     u := user{
18         name:  "Bill",
19         email: "bill@ardanlabs.com",
20     }
21
22     println("V1", &u)
23     return u
24 }

27 func createUserV2() *user {
28     u := user{
29         name:  "Bill",
30         email: "bill@ardanlabs.com",
31     }
32
33     println("V2", &u)
34     return &u
35 }

рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЗрд╕ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 14

./main.go:22: createUserV1 &u does not escape

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

рдЕрдЧрд▓рд╛, рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 15

./main.go:34: &u escapes to heap
./main.go:34:     from ~r0 (return) at ./main.go:34
./main.go:31: moved to heap: u
./main.go:33: createUserV2 &u does not escape

рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЪрд░ рдпреВ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдп, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ рдФрд░ рд▓рд╛рдЗрди 31 рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓рд╛рдЗрди 34 рдкрд░ рд▓реМрдЯрдиреЗ рдХреЗ рдХрд╛рд░рдг рдвреЗрд░ рдореЗрдВ рдбрдВрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рдХрд╣рддреА рд╣реИ, рд▓рд╛рдЗрди рдкрд░ рдХреЙрд▓ рдХрд╛ рдХреЙрд▓ рдХрд░реЗрдВ 33 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЗрди рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдирд╛рдорд╛рдВрдХрд┐рдд рдпрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдкреНрд░рдХрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЪрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдереЛрдбрд╝рд╛ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпреВ рдЪрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрдЬрд╛рдп рд╢рд╛рдмреНрджрд┐рдХ рдкреНрд░рдХрд╛рд░ * рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдерд╛ред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 16

27 func createUserV2() *user {
28     u := &user{
29         name:  "Bill",
30         email: "bill@ardanlabs.com",
31     }
32
33     println("V2", u)
34     return u
35 }

рдлрд┐рд░ рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдЪрд▓рд╛рдУред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 17

./main.go:30: &user literal escapes to heap
./main.go:30:     from u (assigned) at ./main.go:28
./main.go:30:     from ~r0 (return) at ./main.go:34

рдЕрдм рд░рд┐рдкреЛрд░реНрдЯ рдХрд╣рддреА рд╣реИ рдХрд┐ рд╡реЗрд░рд┐рдПрдмрд▓ рдпреВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдп, рдЬрд┐рд╕рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдкреНрд░рдХрд╛рд░ * рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ рдФрд░ рд▓рд╛рдЗрди 28 рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓рд╛рдЗрди 34 рдкрд░ рд▓реМрдЯрдиреЗ рдХреЗ рдХрд╛рд░рдг рдвреЗрд░ рдореЗрдВ рдбрдВрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


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

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

All Articles