рдПрдХ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ

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

builds := store.Instance.GetBuildsFromNumberToNumber(stageBuild.BuildNumber, lastBuild.BuildNumber) tempList := model.BuildsList{} for i := len(builds) - 1; i >= 0; i-- { b := builds[i] b.PatchURLs = b.ReversePatchURLs b.ExtractedSize = b.RPatchExtractedSize tempList = append(tempList, b) } 

рдпрд╣рд╛рдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдмрд┐рд▓реНрдб рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдореЗрдВ, рдкреИрдЪрдкрд░реНрд▓рд╕ рдХреЛ ReversePatchURLs рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, RPatchExtractedize рджреНрд╡рд╛рд░рд╛ ExtractedSize рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рддрддреНрд╡реЛрдВ рдХрд╛ рдХреНрд░рдо рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдкрд╣рд▓рд╛ рдФрд░ рдкрд╣рд▓рд╛ рдЕрдВрддрд┐рдо рдмрди рдЬрд╛рддрд╛ рд╣реИред

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

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

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рди рдХреЗрд╡рд▓ рдХреЛрдб рдХреА рдзрд╛рд░рдгрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рдХрд╛рдлреА рддреЗрдЬ рднреА рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рд╣реИред рдЖрдк рдХрдИ рд╡реИрдХрд▓реНрдкрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреЛрдб рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВред

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

 var tempList []*store.Build for _, build := range builds { build.PatchUrls, build.ExtractedSize = build.ReversePatchUrls, build.RPatchExtractedSize tempList = append([]*store.Build{build}, tempList...) } 

рдЕрдВрдд рд╕реЗ рд╕реНрд▓рд╛рдЗрд╕ рдПрдиреНрдпреВрдорд░реЗрд╢рди рдХреЛ рд╣рдЯрд╛рдХрд░, рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрджрд▓рддреЗ рддрддреНрд╡реЛрдВ (рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐) рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдореВрд▓ рд╕рд░рдгреА (4 рд╡реАрдВ рдкрдВрдХреНрддрд┐) рдХреЗ рд░рд┐рд╡рд░реНрд╕ рдХреЗ рдмреАрдЪ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рд╣реИрдВред

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

 var tempList []*store.Build for _, build := range builds { build.PatchUrls, build.ExtractedSize = build.ReversePatchUrls, build.RPatchExtractedSize } sort.Sort(sort.Reverse(sort.IntSlice(keys))) 

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

 for _, build := range builds { build.PatchUrls, build.ExtractedSize = build.ReversePatchUrls, build.RPatchExtractedSize } sort.Slice(builds, func(i int, j int) bool { return builds[i].Id > builds[j].Id }) 

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

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

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

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

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

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

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

 package services import ( "testing" "sort" ) type Build struct { Id int ExtractedSize int64 PatchUrls string ReversePatchUrls string RPatchExtractedSize int64 } type Builds []*Build func (a Builds) Len() int { return len(a) } func (a Builds) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a Builds) Less(i, j int) bool { return a[i].Id < a[j].Id } func prepare() Builds { var builds Builds for i := 0; i < 100000; i++ { builds = append(builds, &Build{Id: i}) } return builds } func BenchmarkF1(b *testing.B) { data := prepare() builds := make(Builds, len(data)) b.ResetTimer() for i := 0; i < bN; i++ { var tempList Builds copy(builds, data) for i := len(builds) - 1; i >= 0; i-- { b := builds[i] b.PatchUrls, b.ExtractedSize = b.ReversePatchUrls, b.RPatchExtractedSize tempList = append(tempList, b) } } } func BenchmarkF2(b *testing.B) { data := prepare() builds := make(Builds, len(data)) b.ResetTimer() for i := 0; i < bN; i++ { var tempList Builds copy(builds, data) for _, build := range builds { build.PatchUrls, build.ExtractedSize = build.ReversePatchUrls, build.RPatchExtractedSize tempList = append([]*Build{build}, tempList...) } } } func BenchmarkF3(b *testing.B) { data := prepare() builds := make(Builds, len(data)) b.ResetTimer() for i := 0; i < bN; i++ { copy(builds, data) for _, build := range builds { build.PatchUrls, build.ExtractedSize = build.ReversePatchUrls, build.RPatchExtractedSize } sort.Sort(sort.Reverse(builds)) } } func BenchmarkF4(b *testing.B) { data := prepare() builds := make(Builds, len(data)) b.ResetTimer() for i := 0; i < bN; i++ { copy(builds, data) for _, build := range builds { build.PatchUrls, build.ExtractedSize = build.ReversePatchUrls, build.RPatchExtractedSize } sort.Slice(builds, func(i int, j int) bool { return builds[i].Id > builds[j].Id }) } } func BenchmarkF5(b *testing.B) { data := prepare() builds := make(Builds, len(data)) b.ResetTimer() for i := 0; i < bN; i++ { copy(builds, data) for _, build := range builds { build.PatchUrls, build.ExtractedSize = build.ReversePatchUrls, build.RPatchExtractedSize } } } 

рдХрдорд╛рдВрдб рдЧреЛ рдЯреЗрд╕реНрдЯ- рдмреЗрдВрдЪ рдХреЗ рд╕рд╛рде рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ =ред -рдмреЗрдирдЪрдореНрдо

рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдо 10, 100, 1000, 10 000 рдФрд░ 100 000 рддрддреНрд╡ рдиреАрдЪреЗ рдЧреНрд░рд╛рдл рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬрд╣рд╛рдВ F1 рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ, F2 рд╕рд░рдгреА рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рддрддреНрд╡ рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИ, F3 рд╕реЙрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред F4 рд╕реЙрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ ред , F5 - рдЫрдВрдЯрд╛рдИ рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ред

рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рдордп

рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рдордп

рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди рдХреА рд╕рдВрдЦреНрдпрд╛



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

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

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


рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓рд┐рдЦрд┐рдПред

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

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

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


All Articles