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

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЧреЛ рднрд╛рд╖рд╛ рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬреЗрдирд░рд┐рдХ рдХреА рдХрдореА рдФрд░ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рддрдВрддреНрд░ рдирд╣реАрдВ)ред рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдЖрдХрд╛рд░ рдЖрдорддреМрд░ рдкрд░ рдШрдЯрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд╛рдлреА рд╡рд┐рдкрд░реАрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рддреБрд░рдВрдд рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдХреЛрдб рд╕рдорд░реНрдерди рдХрд╛ рддреНрдпрд╛рдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
рдореИрдВрдиреЗ рд▓реЗрдЦ рдореЗрдВ рдХрдо рдХреЛрдб рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдВрдиреЗ рдЧрд┐рддреБрдм рдкрд░ рдХреЛрдб рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдЗрд╕ рдЙрдореНрдореАрдж рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд╕реНрд╡реАрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЬрдирд╛ рддреИрдпрд╛рд░ рдХреАред рдЪреВрдВрдХрд┐ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рдореБрдЦреНрдп рдХреЛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рджреВрдВрдЧрд╛ред
- рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдЪреБрдиреЗрдВ
- рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдЪреБрдиреЗрдВ
- рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди (DI) рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
- рд╡реЗрдм рдЕрдиреБрд░реЛрдз рдорд╛рд░реНрдЧ
- рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ JSON / XML рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ
- ORM
- рдкреНрд░рд╡рд╛рд╕
- рдореЙрдбрд▓ рд▓реЗрдпрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ рд╕реЗрд╡рд╛-> рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА-> рдПрдВрдЯрд┐рдЯреА
- рдмреЗрд╕рд┐рдХ CRUD рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА
- рдмреЗрд╕рд┐рдХ CRUD рд╕реЗрд╡рд╛
- рдмреЗрд╕рд┐рдХ CRUD рдХрдВрдЯреНрд░реЛрд▓рд░
- рдЕрдиреБрд░реЛрдз рдЕрдиреБрд░реЛрдз
- рдХрдиреНрдлрд┐рдЧреНрд╕ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░
- рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб
- рд▓реЙрдЧрд┐рдВрдЧ
- рд╕рдВрддрд░реА рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдПрдХреАрдХрд░рдг
- рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рддрд░реНрдХрддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
- DI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдХреЗ рд╕рд╛рде рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг
- рдкреНрд░рддрд┐рд╢рдд рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рдХреЛрдб рдорд╛рдирдЪрд┐рддреНрд░
- рдЕрдХрдбрд╝
- рдбреЙрдХрдЯрд░ рд░рдЪрдирд╛
рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ
рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж , рдореИрдВрдиреЗ govendor рдХреЛ рдЪреБрдирд╛ рдФрд░ рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ рдЪреБрдирд╛рд╡ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдерд╛ред рдХрд╛рд░рдг рд╕рд░рд▓ рд╣реИ - рдпрд╣ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ, рдкреИрдХреЗрдЬ рдФрд░ рдЙрдирдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкреИрдХреЗрдЬ рдФрд░ рдЙрдирдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХ рд╡рд┐рдХреНрд░реЗрддрд╛ рдореЗрдВ рдЬрдорд╛ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЬреЗрд╕рди рдлрд╝рд╛рдЗрд▓ ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдПрдХ рдЛрдг рднреА рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде, рдЗрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рднреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд┐рд▓ рдЬрд╛рдПрдЧреАред рдлрд╝рд╛рдЗрд▓ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддреА рд╣реИ рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдореБрдЦреНрдп рд╣реИрдВ рдФрд░ рдХреМрди рд╕реА рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рд╣реИрдВред
PHP рдХрдВрдкреЛрдЬрд╝рд░ рдпрд╛ npm рдореЗрдВ, рдореБрдЦреНрдп рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ, рдФрд░ рд╕рднреА рдореБрдЦреНрдп рдФрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд▓рд┐рдП govendor рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдврд╛рдВрдЪрд╛
рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рдореБрдЭреЗ рдЕрдзрд┐рдХ, рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░рд╛рдЙрдЯрд░, рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдорд╛рдиреНрдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдм рд▓реЛрдХрдкреНрд░рд┐рдп рдЬрд┐рди рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд╣ рдЙрд╕ рдкрд░ рд░реБрдХ рдЧрдпрд╛ред
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди
DI рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдиреБрдХрд╕рд╛рди рдЙрдард╛рдирд╛ рдкрдбрд╝рд╛ред рдкрд╣рд▓реЗ рдбрд┐рдЧ рдХреЛ рдЪреБрдирд╛ред рдФрд░ рдкрд╣рд▓реЗ рддреЛ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдерд╛ред рд╡рд░реНрдгрд┐рдд рд╕реЗрд╡рд╛рдПрдВ, рдЦреЛрдж рдЖрдЧреЗ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИрдВ, рдЖрд╕рд╛рдиреА рд╕реЗред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реЗрд╡рд╛ рдХрдВрдЯреЗрдирд░ рд╕рд░реБрд▓рдм / рдбреАрдЖрдИ рд▓рд┐рдпрд╛ред
рдореБрдЭреЗ рдмрд╕ рдЗрд╕реЗ рдлреЛрд░реНрдХ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдпрд╣ рдЖрдкрдХреЛ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЬрдм рдСрдЯреЛрдЯреИрд╕реНрдЯреНрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреБрдЫ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯрдмреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдХрд╛рдВрдЯрд╛ рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реЗрд╡рд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реАред
рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ, рдбреАрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдФрд░ рд╕реЗрд╡рд╛ рдХрдВрдЯреЗрдирд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдореЗрдВ рд░рдЦрдирд╛ рдкрдбрд╝рд╛ред рдЕрдиреНрдпрдерд╛, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдкреИрдХреЗрдЬ ( go test model/service
) рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрд╛рд░рдг рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди ( go test ./...
) рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдЬрд┐рди рдореЗрдВ, рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдмрд╕ рдЖрдзрд╛рд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реА рдЬреЛ рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
func (c BaseController) response(context *gin.Context, obj interface{}, code int) { switch context.GetHeader("Accept") { case "application/xml": context.XML(code, obj) default: context.JSON(code, obj) } }
ORM
рдУрдЖрд░рдПрдо рдХреЗ рд╕рд╛рде рдкрд╕рдВрдж рдХреА рд▓рдВрдмреА рдкреАрдбрд╝рд╛ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рд╣реБрдИред рд╕реЗ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдерд╛ред рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╡рд░реНрдгрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореБрдЭреЗ GORM рдкрд╕рдВрдж рд╣реИ, рдЬреЛ рдЪрдпрди рдХреЗ рд╕рдордп рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ DBMS рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред рдХрдо рд╕реЗ рдХрдо PostgreSQL рдФрд░ MySQL рддреЛ рдЬрд░реВрд░ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдЖрдзрд╛рд░ рд╕реНрдХреАрдорд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рднреА рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рд╡рд╛рд╕
рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдореИрдВ gorm-goose рдкреИрдХреЗрдЬ рдкрд░ рдмрд╕ рдЧрдпрд╛ред рдореИрдВрдиреЗ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рд░рдЦрд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╢рд░реНрдорд┐рдВрджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдПрдХ рдЕрд▓рдЧ рдбреАрдмреА / dbconf.yml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
development: driver: postgres open: $DB_URL
рдФрд░ рдпрд╣ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдбреЙрдХрдЯрд░-рд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдирдХрд▓ рдирд╣реАрдВ рдХрд░рдиреА рдереАред
Gorm-goose рднреА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд░реЛрд▓рдмреИрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИред
рдмреЗрд╕рд┐рдХ CRUD рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА
рдореИрдВ рд╕рдм рдХреБрдЫ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдПрдХ рдЕрд▓рдЧ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░рдд рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛрдб рдХреНрд▓реАрдирд░ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛрдб рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рднрдВрдбрд╛рд░ рд╕реЗ рд▓реЗрддрд╛ рд╣реИред рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рднрдВрдбрд╛рд░ рдПрдХ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде, рдХреЗрд╡реА-рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд╕рд╛рде, рдПрдХ рдбрд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде, рдпрд╛ рд╢рд╛рдпрдж рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реЗрд╡рд╛ рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрди рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛрдб рд╕рдорд╛рди рд╣реЛрдЧрд╛ред
CRUD рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ
type CrudRepositoryInterface interface { BaseRepositoryInterface GetModel() (entity.InterfaceEntity) Find(id uint) (entity.InterfaceEntity, error) List(parameters ListParametersInterface) (entity.InterfaceEntity, error) Create(item entity.InterfaceEntity) entity.InterfaceEntity Update(item entity.InterfaceEntity) entity.InterfaceEntity Delete(id uint) error }
рдЕрд░реНрдерд╛рддреН, CRUD Create()
, Find()
, List()
, Update()
, Delete()
GetModel()
рдФрд░ GetModel()
рдореЗрдердб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
GetModel () рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдПрдХ рдмреБрдирд┐рдпрд╛рджреА CrudRepository
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИ рдЬреЛ рдмреБрдирд┐рдпрд╛рджреА CRUD рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬреЛ рдЗрд╕реЗ рдЦреБрдж рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, GetModel()
рд╡рд┐рдзрд┐ рдХреЛ GORM рдореЙрдбрд▓ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддрдм рд╣рдореЗрдВ рд╕реАрдЖрд░рдПрдо рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ GetModel()
рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
func (c CrudRepository) Find(id uint) (entity.InterfaceEntity, error) { item := reflect.New(reflect.TypeOf(c.GetModel()).Elem()).Interface() err := c.db.First(item, id).Error return item, err }
рдпрд╣реА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдРрд╕реЗ рдХреНрд╖рдгреЛрдВ рдореЗрдВ, рднрд╛рд╖рд╛ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдХреА рдХрдореА рдорд╣рд╕реВрд╕ рд╣реЛрддреА рд╣реИред
List()
рд╡рд┐рдзрд┐ рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рджреЗрд░ рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдХреНрд╡реЗрд░реА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд┐рдзрд┐ рдХреЛ List()
рд╡рд┐рдзрд┐ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПред рдФрд░ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрдВрдбрд╛рд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдмрдирд╛рдИ рдЧрдИ рд╕реЛрдЪ рдХреЗ рдкреИрдЯрд░реНрди рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди, рдЗрд╕реЗ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЪреБрдиреЗ рд╣реБрдП рдорд╛рд░реНрдЧ рдХреЗ "рд▓рд╛рд▓рд┐рддреНрдп" рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рд▓рд╛рд▓ рдХрд░ рджрд┐рдпрд╛ рдЬреЛ рдХрд┐ рдЧреЛ рдХреЗ рдХрд░реАрдм рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ CrudRepository
рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рдШреЛрд╖рд┐рдд List()
рд╣реИ, рдЬрд┐рд╕рдХрд╛ List()
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА List()
ред
listQueryBuilder ListQueryBuilderInterface
рдпрд╣ рдмрд╣реБрдд рдордЬреЗрджрд╛рд░ рдирд┐рдХрд▓рд╛ред рднрд╛рд╖рд╛ рдХреЛ рджреЗрд░ рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдкрд╣рд▓реЗ рдПрдХ рджреЛрд╖ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдХреЛрдб рдХреЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрд▓рдЧрд╛рд╡ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдмреЗрд╕рд┐рдХ CRUD рд╕реЗрд╡рд╛
рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рд╕реАрдЖрд░рдпреВрдбреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХреЙрд▓ рдмрд╕ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИрдВ ред
рд╕реЗрд╡рд╛рдУрдВ рдХреА рдкрд░рдд рдореЗрдВ, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдмреЗрд╕рд┐рдХ CRUD рдХрдВрдЯреНрд░реЛрд▓рд░
рдирд┐рдпрдВрддреНрд░рдХ CRUD рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╡реЗ рдЕрдиреБрд░реЛрдз рд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕реЗрд╡рд╛ рдкрджреНрдзрддрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реЗрд╡рд╛ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред
рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╣реА рдХрд╣рд╛рдиреА рдереА рдЬреЛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рднрдВрдбрд╛рд░ рдХреЗ рд╕рд╛рде рдереАред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВрдиреЗ рд╣реЛрдордореЗрдб рд▓реЗрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рд╣рд╛рдЗрдбреНрд░реЗрдЯрд░ рдЬреЛрдбрд╝рд╛, рдЬреЛ рдЕрдиреБрд░реЛрдз рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реВрдЪреА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддрд╛ рд╣реИред
CRUD рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╣рд╛рдЗрдбреНрд░реЗрдЯрд░ рдореЗрдВ, рдХреЗрд╡рд▓ рдкреГрд╖реНрдард╛рдВрдХрди рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ CRUD рдирд┐рдпрдВрддреНрд░рдХ рдПрдХреАрдХреГрдд рд╣реИ, рд╣рд╛рдЗрдбреНрд░реЗрдЯрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдиреБрд░реЛрдз рдЕрдиреБрд░реЛрдз
рдЬрд┐рди рджреНрд╡рд╛рд░рд╛ рд╕рддреНрдпрд╛рдкрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рддреЗ рд╕рдордп ( Create()
рд╡рд┐рдзрд┐), рдпрд╣ рдЗрдХрд╛рдИ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
Name string `binding:"required"`
рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА ShouldBindJSON()
рд╡рд┐рдзрд┐ рдзреНрдпрд╛рди рд░рдЦрддреА рд╣реИред
рдХрдиреНрдлрд┐рдЧреНрд╕ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рдЗрдкрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рдерд╛, рдЦрд╛рд╕рдХрд░ рдХреЛрдмрд░рд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВред
рдореИрдВрдиреЗ рдореБрдЦреНрдп.рдЧреЛ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдкрдврд╝рд╛ред рдЖрдзрд╛рд░рднреВрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЬрд┐рдирдореЗрдВ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ , рдЙрдиреНрд╣реЗрдВ рдЖрдзрд╛рд░ .env рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЖрдк .enignore рдореЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ .env рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред .Env рдореЗрдВ, рдЖрдк рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЧреБрдкреНрдд рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреА рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред
рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб
рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреЛрдмрд░рд╛ рдХреЛ рдЪреБрдирд╛ред рдерд╛рди рдХреЗ рд▓рд┐рдП рд╡рд╛рдЗрдкрд░ рдХреЗ рд╕рд╛рде рдХреЛрдмрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред рд╣рдо рдХрдорд╛рдВрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
serverCmd.PersistentFlags().StringVar(&serverPort, "port", defaultServerPort, "Server port")
рдФрд░ рдХрдорд╛рдВрдб рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдмрд╛рдВрдзреЗрдВ
viper.BindPFlag("SERVER_PORT", serverCmd.PersistentFlags().Lookup("port"))
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдкреВрд░рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрдВрд╕реЛрд▓ рд╣реИред рд╡реЗрдм рд╕рд░реНрд╡рд░ рдПрдХ рд╕рд░реНрд╡рд░ рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
gin -i run server
рд▓реЙрдЧрд┐рдВрдЧ
рдореИрдВрдиреЗ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧреНрд░рд╕ рдкреИрдХреЗрдЬ рдЪреБрдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЖрдорддреМрд░ рдкрд░ рдЪрд╛рд╣рд┐рдП: рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░ рд╕реЗрдЯ рдХрд░рдирд╛, рдЬрд╣рд╛рдВ рд▓реЙрдЧ рдХрд░рдирд╛, рд╣реБрдХ рдЬреЛрдбрд╝рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрд▓рд░реНрдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реЙрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдПред
рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдПрдХреАрдХрд░рдг
рдореИрдВрдиреЗ рд╕рдВрддрд░реА рдХреЛ рдЪреБрдирд╛, рдХреНрдпреЛрдВрдХрд┐ рд▓реЙрдЧрд░рд╕ рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛ рдЧрдпрд╛: logrus_sentry ред рдореИрдВрдиреЗ SENTRY_DSN
url рдХреЗ рд╕рд╛рде рд╕рдВрддрд░реА SENTRY_DSN
рдФрд░ рд╕реЗрдВрдЯреНрд░реА SENTRY_TIMEOUT
рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реАрдорд╛ SENTRY_TIMEOUT
ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЯрд╛рдЗрдордЖрдЙрдЯ рдЫреЛрдЯрд╛ рд╣реИ, рдпрджрд┐ рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ, рддреЛ 300 рдПрдордПрд╕, рдФрд░ рдХрдИ рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗред
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рддрд░реНрдХрддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
рдореИрдВрдиреЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдкреИрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреАред
DI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдкреБрдирд░реНрд╡рд┐рддрд░рдг рдХреЗ рд╕рд╛рде рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред рдЪреВрдВрдХрд┐ рд╕рд░реНрд╡рд┐рд╕ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдпрдирд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдиреЗ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдереА, рдХрд╛рдВрдЯреЗ рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реА рдЧрдИред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдореЗрдВ, рдЖрдк рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдЙрд╕реА рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ
dic.InitBuilder()
рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдЯрдмреНрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕реЗрд╡рд╛ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
dic.Builder.Set(di.Def{ Name: dic.UserRepository, Build: func(ctn di.Container) (interface{}, error) { return NewUserRepositoryMock(), nil }, })
рдЕрдЧрд▓рд╛, рдЖрдк рдПрдХ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
dic.Container = dic.Builder.Build() userService := dic.Container.Get(dic.UserService).(service.UserServiceInterface)
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рднрдВрдбрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕реНрдЯрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
рдкреНрд░рддрд┐рд╢рдд рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рдХреЛрдб рдорд╛рдирдЪрд┐рддреНрд░
рдореИрдВ рдорд╛рдирдХ рдЧреЛ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдерд╛ред
рдЖрдк рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ
go test test/unit/user_service_test.go -v
рдЖрдк рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ
go test ./... -v
рдЖрдк рдПрдХ рдХрд╡рд░реЗрдЬ рдореИрдк рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд╡рд░реЗрдЬ рдХреЗ рдкреНрд░рддрд┐рд╢рдд рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
go test ./... -v -coverpkg=./... -coverprofile=coverage.out
рдФрд░ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХрд╛ рдПрдХ рдирдХреНрд╢рд╛ рджреЗрдЦреЗрдВ
go tool cover -html=coverage.out
рдЕрдХрдбрд╝
рдЬрд┐рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд┐рди-рд╕реНрд╡реИрдЧрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡реИрдЧрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╕реАрдЖрд░рдпреВрдбреА рд╕рдВрдЪрд╛рд▓рди рдХреЛрдб рдХреА рдирдХрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ, рдореИрдВ рдмрд╕ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ CRUD рдирд┐рдпрдВрддреНрд░рдХ рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдм рдлрд╝рдВрдХреНрд╢рдВрд╕ рдмрдирд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдерд╛ рдХрд┐ рдЧреЛрд╕реНрд╡рд╛рдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд░рд┐рдЪрд╛рд▓рди рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдмрдВрдзреЗ рдмрд┐рдирд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
swagger generate spec -o doc/swagger.yml
рд╡реИрд╕реЗ, рдЧреЛрд╕реНрд╡рд╛рдЧрд░ рдХреЗ рд╕рд╛рде рдЖрдк рд╡рд┐рдкрд░реАрдд рд╕реЗ рднреА рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрд╡реИрдЧрд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдУрдЖрд░рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдЗрдпрд╛рдВ рдереАрдВ, рдФрд░ рдореИрдВрдиреЗ рдЕрдВрддрддрдГ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреЗрди-рд╕реНрд╡реИрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдлрд╝рд╛рдЗрд▓ рдЗрдВрдЧрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ ред
рдбреЙрдХрдЯрд░ рд░рдЪрдирд╛
рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ, рдореИрдВрдиреЗ рджреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝рд╛ - рдХреЛрдб рдХреЗ рд▓рд┐рдП рдФрд░ рдЖрдзрд╛рд░ рдХреЗ рд▓рд┐рдП ред рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдкрд▓рд╛рдпрди рдХреЛ рд░реЛрд▓ рдХрд░рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, dbconf.yml рдореЗрдВ , рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореБрдЭреЗ рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдирд╛ рдкрдбрд╝рд╛ред рдореБрдЭреЗ рдЙрди рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреА рд░рд╛рдп рдЬрд╛рдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЧреЛ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдХреНрд╖рдгреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрдкрдпреЛрдЧреА рдЖрд▓реЛрдЪрдирд╛ рдкрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред рдлреНрд░реЗрдо рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ: https://github.com/zubroide/go-api-boilerplate