рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдкреНрд░рджрд░реНрд╢рди рдХреА рдкрд░рд╡рд╛рд╣ рд╣реИред рдореБрдЭреЗ рдареАрдХ-рдареАрдХ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдзреАрдореА рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рд╕реЗ рдирд╛рд░рд╛рдЬ рд╣реЛ рдЬрд╛рддрд╛ рд╣реВрдВред рд▓рдЧрддрд╛ рд╣реИ
рдореИрдВ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдБ ред
рдП / рдмреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рд╣рдордиреЗ 100 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рд╡реГрджреНрдзрд┐ рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЛ рдзреАрдорд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдмрд╣реБрдд рдХрдо рджреЗрд░реА рд╕реЗ рд░рд╛рдЬрд╕реНрд╡ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧрд┐рд░рд╛рд╡рдЯ рдЖрддреА рд╣реИред - рдЧреНрд░реЗрдЧ рд▓рд┐рдВрдбреЗрди, Amazon.com
рдЕрдиреБрднрд╡ рд╕реЗ, рдХрдо рдЙрддреНрдкрд╛рджрдХрддрд╛ рджреЛ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ:
- рдЫреЛрдЯреЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЪрд╛рд▓рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдмрдврд╝рддреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░ рдпреЗ O (N) рдпрд╛ O (N are) рдСрдкрд░реЗрд╢рди рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЖрдзрд╛рд░ рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрддреНрдкрд╛рдж рдмрд╛рдЬрд╛рд░ рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдЬрд▓реНрджреА рдореЗрдВ рд╣реИред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЖрдзрд╛рд░ рдмрдврд╝рддрд╛ рд╣реИ, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реЛрдЧ рд╕рдВрдмрдВрдзреА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИрдВ - рдФрд░ рд╕реЗрд╡рд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред
- рдЙрдк-рд░реВрдкреА рдХрд╛рдо рдХреЗ рдХрдИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕реНрд░реЛрдд, "рдПрдХ рд╣рдЬрд╛рд░ рдХрдЯреМрддреА рд╕реЗ рдореМрддред"
рдЕрдкрдиреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд░рд┐рдпрд░ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдпрд╛ рддреЛ рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрд╕ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдпрд╛ рдЧреЛ рдкрд░ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡ рд╣реИред рдЧреЛ рдЖрдорддреМрд░ рдкрд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдЕрдбрд╝рдЪрди рдирд╣реАрдВ рд╣реИ - рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрдХреНрд╕рд░ I / O рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдмреИрдЪ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрдХреНрд╕рд░ рд╕реАрдкреАрдпреВ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ Go рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рднрд┐рдиреНрди рд░рдгрдиреАрддрд┐рдпрд╛рдБ рд╣реИрдВред
рдпрд╣ рд▓реЗрдЦ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рдирд╛ рдЕрдзрд┐рдХ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдпрд╛рд╕ рдпрд╛ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреЛрдИ рднреА рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓реЗрдВред рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдВрдзреЗрд░реЗ рдореЗрдВ рднрдЯрдХреЗрдВрдЧреЗ, рд╕реЛрдЪреЗрдВрдЧреЗ рдХрд┐ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдХреЛрдИ рд▓рд╛рдн рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓рд┐рдЦрд┐рдП рдФрд░ рдкреНрд░реЛрдлрд┐рдЯ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреЗ рд▓рд┐рдП
рдкреНрд░реЛрдлрд╛рдЗрд▓ рд▓реАрдЬрд┐рдПред
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛ рднреА рдЧреЛ рдкрд░ рд▓рд┐рдЦрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛
рд╣реИ : рдЗрд╕рд╕реЗ рдкреАрд░рд┐рдЯ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрдВрдЪрдХреИрдВрдк рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЕрдВрддрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдгред
рдпрджрд┐ рдХреЛрдб рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдмрд╕ рдЙрд╕ рдЪреАрдЬрд╝ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдорд╛рдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк
рд░рдирдЯрд╛рдЗрдо / рдкреАрдЯреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИ!
рдкрд╣рд▓реЗ рдЪрдпрдирд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Sync.Pool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╕рд┐рдВрдХ.рдкреБрд▓
рдПрдХ рд╕реВрдЪреА рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ ред рдпрд╣ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХрдЪрд░реЗ рдХреЗ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреЗ рдХрд╛рдо рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реБрдП, рдХрдИ рдЙрдкрдпреЛрдЧреЛрдВ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд┐рддрд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдкреАрдЖрдИ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдЬреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдкреАрдЖрдИ рд╕реВрдЪрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред
var bufpool = sync.Pool{ New: func() interface{} { buf := make([]byte, 512) return &buf }}
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдкреВрд▓ рд╕реЗ
Put()
рдФрд░
Put()
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЖрдк рдХрд░ рд░рд╣реЗ рд╣реЛрдВред
рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред 1.13 рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкреВрд▓ рдХреЛ рд╣рд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рд╕рд╛рдл рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЙрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдкреНрд░рддрд┐рдХреВрд▓ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдмрд╣реБрдд рд╕рд╛рд░реА рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВред 1.13 рддрдХ,
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╡рд╕реНрддреБрдПрдВ рдЬреАрд╕реА рдХреЗ рдмрд╛рдж рдмрдЪ рдЬрд╛рддреА рд╣реИрдВ ред
!!! рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреВрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрд░рдЪрдирд╛ рдлрд╝реАрд▓реНрдб рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВредрдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрд╕ рдкреВрд▓ рд╕реЗ рдПрдХ рдЧрдВрджреА рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдбреЗрдЯрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЧрдВрднреАрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдЦрд┐рдо рд╣реИ!
type AuthenticationResponse { Token string UserID string } rsp := authPool.Get().(*AuthenticationResponse) defer authPool.Put(rsp)
рд╢реВрдиреНрдп рдореЗрдореЛрд░реА рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХрд╛ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд░реЗрдВ:
рдПрдХрдорд╛рддреНрд░ рдорд╛рдорд▓рд╛ рдЬрдм рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм рдЖрдк рд▓рд┐рдЦреА рдЧрдИ рд╕рдЯреАрдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
var ( r io.Reader w io.Writer )
рдПрдХ рдмрдбрд╝реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдпреБрдХреНрдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ
рдлреВрд╣, рдореИрдВ рднреА рд╡рд╛рдЪрд╛рд▓ рдерд╛ред рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рд╡реЗ рдЕрдХреНрд╕рд░ (рдореЗрд░реЗ рдкреВрд░реНрд╡ рд╕рд╣рдпреЛрдЧреА
рдлрд┐рд▓ рдкрд░реНрд▓ рд╕рд╣рд┐рдд)
рдмрдбрд╝реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдЧреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рдереЗред рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рджреМрд░рд╛рди, рд░рдирдЯрд╛рдЗрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╕реЗ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдорд╛рдирдЪрд┐рддреНрд░
map[string]int
, рддреЛ рдЬреАрд╕реА рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╣рд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕рдВрдХреЗрдд рд╣реЛрддреЗ рд╣реИрдВред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо 10 рдорд┐рд▓рд┐рдпрди рддрддреНрд╡реЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
map[string]int
рд▓рд┐рдП рдФрд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреА рдЕрд╡рдзрд┐ рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВред рд╣рдо рдвреЗрд░ рд╕реЗ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдкрдирд╛ рдирдХреНрд╢рд╛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
package main import ( "fmt" "runtime" "strconv" "time" ) const ( numElements = 10000000 ) var foo = map[string]int{} func timeGC() { t := time.Now() runtime.GC() fmt.Printf("gc took: %s\n", time.Since(t)) } func main() { for i := 0; i < numElements; i++ { foo[strconv.Itoa(i)] = i } for { timeGC() time.Sleep(1 * time.Second) } }
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдкрд░, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ:
inthash тЖТ go рдЗрдВрд╕реНтАНрдЯреЙрд▓ && inthash
gc рд▓рд┐рдпрд╛: 98.726321ms
gc рд▓рд┐рдпрд╛: 105.524633ms
gc рд▓рд┐рдпрд╛: 102.829451ms
gc рд▓рд┐рдпрд╛: 102.71908ms
gc рд▓рд┐рдпрд╛: 103.084104ms
gc рд▓рд┐рдпрд╛: 104.821989ms
рдХрдВрдкреНрдпреВрдЯрд░ рджреЗрд╢ рдореЗрдВ рдпрд╣ рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╕рдордп рд╣реИ!
рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рд╣рд░ рдЬрдЧрд╣ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рд╣рдЯрд╛рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддрд╛рдХрд┐ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рд▓реЛрдб рди рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕рдВрдХреЗрдд рд╣реИрдВ ; рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ
map[int]int
рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
package main import ( "fmt" "runtime" "time" ) const ( numElements = 10000000 ) var foo = map[int]int{} func timeGC() { t := time.Now() runtime.GC() fmt.Printf("gc took: %s\n", time.Since(t)) } func main() { for i := 0; i < numElements; i++ { foo[i] = i } for { timeGC() time.Sleep(1 * time.Second) } }
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдирд╛, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ:
inthash тЖТ go рдЗрдВрд╕реНтАНрдЯреЙрд▓ && inthash
gc рд▓рд┐рдпрд╛: 3.608993ms
gc рд▓рд┐рдпрд╛: 3.926913ms
gc рд▓рд┐рдпрд╛: 3.955706ms
gc рд▓рд┐рдпрд╛: 4.063795ms
gc рд▓рд┐рдпрд╛: 3.91519ms
gc рд▓рд┐рдпрд╛: 3.75226ms
рдмрд╣реБрдд рдмреЗрд╣рддрд░ред рд╣рдордиреЗ 35 рдмрд╛рд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдИ рд╣реИред рдЬрдм рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрд╛рд░реНрдб рдореЗрдВ рдбрд╛рд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рддрд╛рд░ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рд╣реИрд╢ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред
рд╡реИрд╕реЗ, рдЬреАрд╕реА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдХрдИ рдФрд░ рддрд░реАрдХреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╡реНрдпрд░реНрде рд╕рдВрд░рдЪрдирд╛рдУрдВ, ints рдпрд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╡рд┐рд╢рд╛рд▓рдХрд╛рдп рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ
рдЬреАрд╕реА рдЗрд╕реЗ рд╕реНрдХреИрди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ : рдЕрд░реНрдерд╛рдд, рдЖрдк рдЬреАрд╕реА рд╕рдордп рдкрд░ рдмрдЪрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдЬ рд╣рдо рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред
рдХрд┐рд╕реА рднреА рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде, рдкреНрд░рднрд╛рд╡ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдмрдбрд╝реЗ рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдореГрддрд┐ рдХреА рдЦрдкрдд рдореЗрдВ
рд╡реГрджреНрдзрд┐ рдХреЗ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рдбреЗрдорд┐рдпрди рдЧреНрд░рд╛рдЗрд╕реНрдХреА рдХреЗ рдЯреНрд╡реАрдЯреНрд╕ рдХреЗ
рдзрд╛рдЧреЗ рдХреЛ рджреЗрдЦреЗрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд╣ рд╕рдм рдХреБрдЫ рдкрдврд╝реЗрдВ рдЬреЛ рд╡рд╣ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд░рдирдЯрд╛рдЗрдо рдкрд░рд╛рд╡рд░реНрддрди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬрдирд░реЗрд╢рди рдХреА рдорд╛рд░реНрдХрд╢реАрдЯ
JSON рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдорд╛рд░реНрд╢реЗрд▓ рдХрд░рдирд╛ рдФрд░ рдЕрдирдорд░реНрд╢ рдХрд░рдирд╛, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдкрд░реЗрд╢рди рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдореИрдЯреНрд░реЛрдЬрд╝ рд╕рд░реНрд╡рд┐рд╕реЗрдЬрд╝ рдмрдирд╛рддреЗ рд╣реИрдВред рдХрдИ microservices рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдПрдХрдорд╛рддреНрд░ рдХрд╛рдо рд╣реИред
json.Marshal
рдФрд░
json.Unmarshal
рдЬреИрд╕реЗ рдХрд╛рд░реНрдп рдмрд╛рдЗрдЯреНрд╕ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╕реНрдкрд╖реНрдЯ рдХреЛрдб рдЬрд┐рддрдирд╛ рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред JSON рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ рдореИрдХреЗрдирд┐рдХреНрд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
package json // Marshal take an object and returns its representation in JSON. func Marshal(obj interface{}) ([]byte, error) { // Check if this object knows how to marshal itself to JSON // by satisfying the Marshaller interface. if m, is := obj.(json.Marshaller); is { return m.MarshalJSON() } // It doesn't know how to marshal itself. Do default reflection based marshallling. return marshal(obj) }
рдпрджрд┐ рд╣рдо JSON рдореЗрдВ рдорд╛рд░реНрд╢рд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рд╛рдЧ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рд╕рднреА рдорд╛рд░реНрд╢рд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдпрд╣ рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рджреЗрдВ! рдХреЛрдб рдЬреЗрдирд░реЗрдЯрд░ рдЬреИрд╕реЗ рдХрд┐
рдИрдЬреАрд╕рди рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ
json.Marshaller
рдЬреИрд╕реЗ рдореМрдЬреВрджрд╛
json.Marshaller
рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИред
рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░
$file.go
рдореЗрдВ рдирд┐рдореНрди рдХрдорд╛рдВрдб
$file.go
, рдЬрд┐рд╕рдореЗрдВ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЖрдк рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
easyjson -all $ file.go
рдлрд╝рд╛рдЗрд▓
$file_easyjson.go
рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐
easyjson
рдЖрдкрдХреЗ рд▓рд┐рдП
json.Marshaller
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдмрдЬрд╛рдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдмрдзрд╛рдИ: рдЖрдкрдиреЗ рддреАрди рдмрд╛рд░ рдЕрдкрдирд╛ JSON рдХреЛрдб рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ред рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЛ рдФрд░ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░рдХреАрдмреЗрдВ рд╣реИрдВред
рдореИрдВ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЦреБрдж рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХред рд▓реЗрдХрд┐рди рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред рдХреГрдкрдпрд╛ рдЗрд╕реЗ рд╕рдмрд╕реЗ рддреЗрдЬ JSON рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рд╕рд╛рде рдЖрдХреНрд░рд╛рдордХ рдмрд╣рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдирд┐рдордВрддреНрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рди рд▓реЗрдВред
рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рдорд╛рд░реНрд╢рд┐рдВрдЧ рдХреЛрдб рдХреЛ рдкреБрди: рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдирдП рдЬреЛрдбрд╝реЗ рдЧрдП рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рднреНрд░рдо рдкреИрджрд╛ рд╣реЛрдЧрд╛! рдЖрдк рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП
go generate
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдЯ рдкрд░
generate.go
рдХреЛ рд╕реНрдерд╛рди рджреЗрдирд╛ рдкрд╕рдВрдж
generate.go
рд╣реВрдВ, рдЬреЛ рд╕рднреА рдкреИрдХреЗрдЬ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП
go generate
рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рддрдм рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЦреНрдп рдЯрд┐рдк: рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдЕрджреНрдпрддрди рд╣реИрдВ, рдХреЙрд▓ рд╕реАрдЖрдИ рдореЗрдВ
go generate
рдХрд░реЗрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдкрдВрдЬреАрдХреГрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред
рддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЧреЛ рдореЗрдВ, рддрд╛рд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ: рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪреЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХрд╛рдо рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВред
1.10 рд▓рд╛рдЧреВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдкрд░ рдЬрд╛рдПрдВред рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрд╢рд▓ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ
рдмреНрд░реИрд╕реНрдЯ ред рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рдмрд╛рдЗрдЯ рдмрдлрд░ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рддрдм рдЬрдм рдмрд┐рд▓реНрдбрд░ рдореЗрдВ
String()
рдХреЙрд▓рд┐рдВрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рддрд╛ рд╣реИред рд╡рд╣ рдмреЗрд╕ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдПрдХ рд╢реВрдиреНрдп рдЖрд╡рдВрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЪрд╛рд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:
рдЗрд╕ рдмреНрд▓реЙрдЧ рдХреЛ рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
рдпрд╣рд╛рдБ рдореЗрд░реЗ рдореИрдХрдмреБрдХ рдкреНрд░реЛ рдкрд░ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:
strbuild -> go test -bench =ред -benchmem
goos: рдбрд╛рд░реНрд╡рд┐рди
goarch: amd64
pkg: github.com/sjwhitworth/perfblog/strbuild
BenchmarkStringBuildNaive-8 5,000,000 255 ns / op 216 B / op 8 allocs / op
рдмреЗрдВрдЪрдорд╛рд░реНрдХрд╕реНрдЯреНрд░рд┐рдВрдЧрдмреАрд▓реНрдбрдмреБрд▓реНрдЯ -8 20,000,000 54.9 ns / op 64 B / op 1 рдСрд▓реЛрдХреЛрдЬрд╝ рдФрд░ рдкреНрд░рддрд┐ рдСрдкреНрд╕
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ,
strings.Builder
4.7 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИ, рдЖрда рдмрд╛рд░ рдХрдо рдЖрд╡рдВрдЯрди рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдФрд░ рдЪрд╛рд░ рдЧреБрдирд╛ рдХрдо рдореЗрдореЛрд░реА рд▓реЗрддрд╛ рд╣реИред
рдЬрдм рдкреНрд░рджрд░реНрд╢рди рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ,
strings.Builder
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдЗрд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдЗрдорд╛рд░рдд рдХреЗ рд╕рдмрд╕реЗ рддреБрдЪреНрдЫ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред
Fmt рдХреЗ рдмрдЬрд╛рдп strconv рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
fmt рдЧреЛ рдореЗрдВ рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдкреИрдХреЗрдЬ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЖрдкрдиреЗ рд╢рд╛рдпрдж "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЬрдм рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рддреИрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрд╕рдХреЗ рдЫреЛрдЯреЗ рднрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкреИрдХреЗрдЬ API рдореЗрдВ рдмрд╣реБрдд рдХрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рджрд┐рдЦрд╛рддрд╛ рд╣реИред
fmt
рдореВрд▓ рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ
interface{}
рд▓реЗрддрд╛ рд╣реИред рджреЛ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ:
- рдЖрдк рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдЦреЛ рд░рд╣реЗ рд╣реИрдВред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
- рдЗрд╕рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕реНрд░рд╛рд╡ рдХреА рдорд╛рддреНрд░рд╛ рдмрдврд╝ рд╕рдХрддреА рд╣реИред рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ
interface{}
рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ interface{}
рдЖрдорддреМрд░ рдкрд░ рдвреЗрд░ рдЖрд╡рдВрдЯрди рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИред - рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЕрдВрддрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
рдореИрдХрдмреБрдХ рдкреНрд░реЛ рдкрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ:
strfmt тЖТ go test -bench =ред -benchmem
goos: рдбрд╛рд░реНрд╡рд┐рди
goarch: amd64
pkg: github.com/sjwhitworth/perfblog/strfmt
BenchmarkStrconv-8 30,000,000 39.5 ns / op 32 B / op 1 allocs / op
рдмреЗрдВрдЪрдорд╛рд░реНрдХрдПрдлрдПрдордЯреА -8 10,000,000 143 ns / op 72 B / op 3 allocs / op
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдЯреНрд░реЗрдВрдХ рд╡рд┐рдХрд▓реНрдк 3.5 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИ, рддреАрди рдмрд╛рд░ рдХрдо рдЖрд╡рдВрдЯрди рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдФрд░ рдЖрдзреА рдореЗрдореЛрд░реА рд▓реЗрддрд╛ рд╣реИред
рдкреБрдирд░реНрд╡рд┐рддрд░рдг рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд▓рд╛рдЗрд╕ рдЯреИрдВрдХ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ
рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рд╕реНрдореГрддрд┐ рдореЗрдВ рдХрдЯрд╛ рд╣реБрдЖ рдЬрд╛рдирдХрд╛рд░реА рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред рдЧреЛ рдореЗрдВ рдПрдХ рд╕реНрд▓рд╛рдЗрд╕ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд┐рд░реНрдорд╛рдг рд╣реИред рдпрд╣ рдПрдХ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╕рд░рдгреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдзрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╣реА рдЖрдзрд╛рд░ рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рддреАрди рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ:
type slice struct {
рдпреЗ рдЦреЗрдд рдХреНрдпрд╛ рд╣реИрдВ?
data
: рд╕реВрдЪрдХ рдХреЛ рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП
len
: рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕рдВрдЦреНрдпрд╛
cap
: рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреБрдирд░реНрд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрдврд╝ рд╕рдХрддрд╛ рд╣реИ
рд╣реБрдб рдХреЗ рддрд╣рдд рдзрд╛рд░рд╛рдПрдВ рддрдп рд▓рдВрдмрд╛рдИ рдХреА рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реИрдВред рдЬрдм рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп ( cap
) рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдбрдмрд▓ рдорд╛рди рд╡рд╛рд▓рд╛ рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореЗрдореЛрд░реА рдХреЛ рдкреБрд░рд╛рдиреЗ рд╕реНрд▓рд╛рдЗрд╕ рд╕реЗ рдирдП рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреБрд░рд╛рдиреЗ рдПрд░реЗ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдЗрд╕ рдХреЛрдб рдХреА рддрд░рд╣ рдХреБрдЫ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рд╢реВрдиреНрдп рд╕реАрдорд╛ рдХреНрд╖рдорддрд╛ рд╡рд╛рд▓рд╛ рд╕реНрд▓рд╛рдЗрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╕реНрд▓рд╛рдЗрд╕ рдХреНрд╖рдорддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИ:
var userIDs []string for _, bar := range rsp.Users { userIDs = append(userIDs, bar.ID) }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрд▓рд╛рдЗрд╕ рд╢реВрдиреНрдп рдЖрдХрд╛рд░ len
рдФрд░ рд╢реВрдиреНрдп рд╕реАрдорд╛ рдХреНрд╖рдорддрд╛ cap
рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЙрд╕реА рд╕рдордп рд╣рдо рд╕реАрдорд╛ рдХреНрд╖рдорддрд╛ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ: рдПрдХ рдирдпрд╛ рдЖрдзрд╛рд░ рд╕рд░рдгреА рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ cap
рджреЛрдЧреБрдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдЗрд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдореЗрдВ рдЙрддреНрддрд░ рдореЗрдВ 8 рддрддреНрд╡ рдорд┐рд▓рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ 5 рдкреБрдирд░реНрд╡рд┐рддрд░рдг рд╣реЛрддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ:
userIDs := make([]string, 0, len(rsp.Users)) for _, bar := range rsp.Users { userIDs = append(userIDs, bar.ID) }
рдпрд╣рд╛рдВ рд╣рдордиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорддрд╛ рдЖрд╡рдВрдЯрд┐рдд рдХреА рд╣реИред рдЕрдм рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдФрд░ рдирдХрд▓ рдХреЗ рдмрд┐рдирд╛, рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╣рд╛рдВ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдкрдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рддрдиреА рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреНрд╖рдорддрд╛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд╣реИ рдпрд╛ рдмрд╛рдж рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд▓рд╛рдЗрд╕ рд╕рд╛рдЗрдЬрд╝ рдХреЗ рдЕрдВрддрд┐рдо рд╡рд┐рддрд░рдг рдХреЛ рдорд╛рдкреЗрдВред рдореИрдВ рдЖрдорддреМрд░ рдкрд░ 90 рд╡рд╛рдБ рдпрд╛ 99 рд╡рд╛рдБ рдкреНрд░рддрд┐рд╢рдд рдФрд░ рд╣рд╛рд░реНрдб рдХреЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдорд╛рди рд▓реЗрддрд╛ рд╣реВрдБред рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рд╕реАрдкреАрдпреВ рдЖрдкрдХреЗ рд▓рд┐рдП рд░реИрдо рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИ, рдпрд╣ рдорд╛рди рдЬрд┐рддрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕реЗрдЯ рдХрд░реЗрдВред
рдЯрд┐рдк рдирдХреНрд╢реЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ: make(map[string]string, len(foo))
рдкреБрдирд░реНрд╡рд┐рддрд░рдг рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдЧрд╛ред
рдпрд╣ рд▓реЗрдЦ рджреЗрдЦреЗрдВ рдХрд┐ рд╕реНрд▓рд╛рдЗрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдкреИрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЙрди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ: рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рддрд░рдг рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рджреЗрддреА рд╣реИрдВред
рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕рдордп рдФрд░ рд╕рдордп ред рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИред рд╣реБрдб рдХреЗ рддрд╣рдд, рдпрд╣ рдПрдХ рдирдпрд╛ рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдЪреБрдирддрд╛ рд╣реИ рдФрд░ time.AppendFormat
рдкрд░ time.AppendFormat
рдХрд╣рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдПрдХ рдмрд╛рдЗрдЯ рдмрдлрд░ рд▓реЗрддрд╛ рд╣реИ, рдПрдХ рд╕реНрд╡рд░реВрдкрд┐рдд рд╕рдордп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЕрдХреНрд╕рд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: strconv.AppendFloat рдпрд╛ рдмрд╛рдЗрдЯреНрд╕ рджреЗрдЦреЗрдВ редNewBuffer ред
рдЗрд╕рд╕реЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреНрдпреЛрдВ рдмрдврд╝рддреА рд╣реИ? рдЦреИрд░, рдЕрдм рдЖрдк рдЙрд╕ рдмрд╛рдЗрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ sync.Pool
рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛ред рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рдмрдлрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред рдпрд╛ рдЖрдк рд╕реНрд▓рд╛рдЗрд╕ рдХреА рджреЛрд╣рд░рд╛рдИ рдЧрдИ рдкреНрд░рддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрдлрд░ рдЖрдХрд╛рд░ рдХреЛ рдПрдХ рдореВрд▓реНрдп рдкрд░ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИред
рд╕рд╛рд░рд╛рдВрд╢
рдЖрдк рдЗрди рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдЖрдзрд╛рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдордп рдХреЗ рд╕рд╛рде, рдЖрдк рдЧреЛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд╕реЗ рдЙрдирдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдХрд╛рдлреА рдорджрдж рдорд┐рд▓реЗрдЧреАред
рд▓реЗрдХрд┐рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпреЗ рд╕рд▓рд╛рд╣ рд╣реИрдВ, рд╕реБрд╕рдорд╛рдЪрд╛рд░ рдирд╣реАрдВред рдорд╛рдк рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЬрд╛рдВрдЪреЗрдВред
рдФрд░ рдкрддрд╛ рд╣реИ рдХрдм рд░реБрдХрдирд╛ рд╣реИред рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡реНрдпрд╛рдпрд╛рдо рд╣реИ: рдХрд╛рд░реНрдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рддреБрд░рдВрдд рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реНрдерд┐рддрд┐ рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рд░реНрднрд░ рд╣реИред рдпрджрд┐ рдЖрдкрдХреА рд╕реЗрд╡рд╛ 10 ms рдореЗрдВ рдЙрддреНрддрд░ рджреЗрддреА рд╣реИ, рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рд▓рдВрдм 90 ms рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЗрди 10 ms рдХреЛ 5 ms рддрдХ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА 95 ms рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк 1 рдПрдордПрд╕ рддрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднреА рдХреБрд▓ рджреЗрд░реА 91 рдПрдордПрд╕ рд╣реЛрдЧреАред рд╢рд╛рдпрдж рдмрдбрд╝реА рдордЫрд▓реА рдЦрд╛рддреЗ рд╣реИрдВред
рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╕реЗ рдЕрдиреБрдХреВрд▓рди!
рд╕рдВрджрд░реНрдн
рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рдорд╣рд╛рди рд╕реНрд░реЛрдд рд╣реИрдВ: