5 рдЙрдиреНрдирдд рдЧреЛ рдкрд░реАрдХреНрд╖рдг рддрдХрдиреАрдХреЗрдВ

рд╕рднреА рдХреЛ рд╕рд▓рд╛рдо! "рдЧреЛрд▓рдВрдЧ рдбреЗрд╡рд▓рдкрд░" рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕рдкреНрддрд╛рд╣ рд╕реЗ рднреА рдХрдо рд╕рдордп рдмрдЪрд╛ рд╣реИ рдФрд░ рд╣рдо рд╡рд┐рд╖рдп рдкрд░ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░реА рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!



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

рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

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

 type Thinger interface { DoThing(input string) (Result, error) } // Suite tests all the functionality that Thingers should implement func Suite(t *testing.T, impl Thinger) { res, _ := impl.DoThing("thing") if res != expected { t.Fail("unexpected result") } } // TestOne tests the first implementation of Thinger func TestOne(t *testing.T) { one := one.NewOne() Suite(t, one) } // TestOne tests another implementation of Thinger func TestTwo(t *testing.T) { two := two.NewTwo() Suite(t, two) } 

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

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

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

рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдПрдХ рдФрд░ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ golang.org/x/net/nettest рдкреИрдХреЗрдЬ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдзрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ net.Conn рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рдВрджреВрд╖рдг рд╕реЗ рдмрдЪреЗрдВ

рдЖрдк рдЧреЛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

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

рдкреИрдХреЗрдЬ рдЕрдХреНрд╕рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐:

рдП) рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреИрдХреЗрдЬ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдирдХрд▓реА рдмрдирд╛рддреЗ рд╣реИрдВ;
рдмреА) рдкреИрдХреЗрдЬ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирдХрд▓реА рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред

"рдмрдбрд╝рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдХрдордЬреЛрд░ рдЕрдореВрд░реНрддрддрд╛"
- рд░реЛрдм рдкрд╛рдЗрдХ, рдЧреЛрдЗрдВрдЧ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ

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

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

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

рд╕рдВрдЧрд╛рдорд┐рддрд┐ рдЖрджрд┐рдо рдирд┐рд░реНрдпрд╛рдд рди рдХрд░реЗрдВ

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

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

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

рдХрддрд╛рд░ рдкрдврд╝рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдХрддрд╛рд░ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

 type Reader struct {...} func (r *Reader) ReadChan() <-chan Msg {...} 

рдЕрдм рдЖрдкрдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ:

 func TestConsumer(t testing.T) { cons := &Consumer{ r: libqueue.NewReader(), } for msg := range cons.r.ReadChan() { // Test thing. } } 


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрдм рдпрд╣ рддрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рдЪреИрдирд▓ рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦреЗрдВ:

 func TestConsumer(t testing.T, q queueIface) { cons := &Consumer{ r: q, } for msg := range cons.r.ReadChan() { // Test thing. } } 


рд░реБрдХреЛ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

 func TestConsumer(t testing.T, q queueIface) { cons := &Consumer{ r: q, } for { select { case msg := <-cons.r.ReadChan(): // Test thing. case err := <-cons.r.ErrChan(): // What caused this again? } } } 


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

 func TestConsumer(t testing.T, q queueIface) { cons := &Consumer{ r: q, } msg, err := cons.r.ReadMsg() // handle err, test thing } 


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

net/http/httptest рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

Httptest рдХрд┐рд╕реА рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдпрд╛ рдХрд┐рд╕реА рдкреЛрд░реНрдЯ рд╕реЗ http.Handler рдХрд┐рдП рдмрд┐рдирд╛ http.Handler рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЧрддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХрдо рд▓рд╛рдЧрдд рдкрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

 func TestServe(t *testing.T) { // The method to use if you want to practice typing s := &http.Server{ Handler: http.HandlerFunc(ServeHTTP), } // Pick port automatically for parallel tests and to avoid conflicts l, err := net.Listen("tcp", ":0") if err != nil { t.Fatal(err) } defer l.Close() go s.Serve(l) res, err := http.Get("http://" + l.Addr().String() + "/?sloths=arecool") if err != nil { log.Fatal(err) } greeting, err := ioutil.ReadAll(res.Body) res.Body.Close() if err != nil { log.Fatal(err) } fmt.Println(string(greeting)) } func TestServeMemory(t *testing.T) { // Less verbose and more flexible way req := httptest.NewRequest("GET", "http://example.com/?sloths=arecool", nil) w := httptest.NewRecorder() ServeHTTP(w, req) greeting, err := ioutil.ReadAll(w.Body) if err != nil { log.Fatal(err) } fmt.Println(string(greeting)) } 

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

рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рд░реНрдХ рдмрд░реНрдЬрд░ рдХреЗ рд▓реЗрдЦ рдХреЛ рджреЗрдЦреЗрдВ ред

рдЕрд▓рдЧ рдкреИрдХреЗрдЬ _test рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░реАрдХреНрд╖рдг pkg_test.go рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдПрдХ рд╣реА рдкреИрдХреЗрдЬ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ: package pkg ред рдПрдХ рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рдг рдкреИрдХреЗрдЬ рд╡рд╣ рдкреИрдХреЗрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдирдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, foo_test.go , рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, foo/ , рдШреЛрд╖рдгрд╛ package foo_test ред рдпрд╣рд╛рдБ рд╕реЗ рдЖрдк github.com/example/foo рдФрд░ рдЕрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдкрдХреЛ рдХрдИ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ, рдпрд╣ "рднрдВрдЧреБрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ" рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕рд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рддреЛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред

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

рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЖрдпрд╛рдд рдЪрдХреНрд░ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдЬрд╣рд╛рдВ рдЖрдпрд╛рдд рдЪрдХреНрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдкреИрдХреЗрдЬ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рджреЛрдиреЛрдВ рдкреИрдХреЗрдЬ рдХреЗ рдКрдкрд░ рдПрдХ рдмрд╛рд╣рд░реА рдкреИрдХреЗрдЬ рд╕реНрдерд┐рдд рд╣реИред рдж рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ (рдЪреИрдкреНрдЯрд░ 11 рд╕реЗрдХреНрд╢рди 2.4) рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ, рдЬрд╣рд╛рдВ net/url рдПрдХ URL рдкрд╛рд░реНрд╕рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ net/http рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, net / url рдХреЛ net / http рдЖрдпрд╛рдд рдХрд░рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ net/url_test ред

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

рдЖрдкрдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпрд╛ рд╣реИ?

рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд░рд╛рдордмрд╛рдг рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рднреА рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╣реИ рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдЪреБрдирдирд╛ рд╣реИред

рдЧреЛ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдпреЗ рд▓реЗрдЦ рдкрдврд╝реЗрдВ:

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

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

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


All Articles