рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрд╕рдХреНрдпреВрдПрд▓-рдбрдореНрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреЛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде 100% рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреЗ рд░рд╛рд╕реНрддреЗ рдкрд░

рдЫрд╡рд┐


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


рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп


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


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


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


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


рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред


рдкрд╣рд▓реА рдореБрд╢реНрдХрд┐рд▓реЗрдВ


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


рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди github.com/jmoiron/sqlx рд╕реЗ MapScan рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ рдирдореВрдирд╛ рдХреЙрд▓рдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдЖрдХрд╛рд░ рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЯреБрдХрдбрд╝рд╛ рдмрдирд╛рдпрд╛ред рдЕрдЧрд▓рд╛ рд╕рд╡рд╛рд▓ рдерд╛ рдХрд┐ рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕рдорд╛рдзрд╛рди рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рд╣реИ ред рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реЗ рд╣реИрдВ, рддрд╛рд░ рдХреЗ рдирд┐рд╢рд╛рди рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рд╕рдВрд▓рдЧреНрди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд░, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред


рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде, рдПрдХ рдЧреЛ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рднреА рдкреНрд░рдХрдЯ рд╣реБрдИ рдереА - рдкреНрд░рдХрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдПрдХ рдЪрд░ рдорд╛рди nil рдирд╣реАрдВ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ NULL рджреЛрдиреЛрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, database/sql рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ - рд╡рд┐рд╢реЗрд╖ strut рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдореВрд▓реНрдп рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рд╡рд╣ NULL рдпрд╛ рдирд╣реАрдВред


рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреЗ рдкреНрд░рддрд┐рд╢рдд рдХреА рдЧрдгрдирд╛


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


 language: go go: - 1.9 script: - go get -t -v ./... - go get golang.org/x/tools/cmd/cover - go get github.com/mattn/goveralls - go test -v -covermode=count -coverprofile=coverage.out ./... - $HOME/gopath/bin/goveralls -coverprofile=coverage.out -service=travis-ci -repotoken $COVERALLS_TOKEN 

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


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


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


рдЖрдк рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╡рд░реЗрдЬ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕реА go test -v -covermode=count -coverprofile=coverage.out ./... , рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ CI рдореЗрдВ рдЕрдзрд┐рдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк go test -v -covermode=count -coverprofile=coverage.out ./... рдкрд░ рдПрдХ рдкреНрд▓реЗрдЯ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред


рдЪреВрдВрдХрд┐ рд╣рдо рдкрд╛рд╕рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ https://goreportcard.com рд╕реЗ рдкрд╛рд╕рд╛ рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ, рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХреЗрддрдХреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ:


  • gofmt - рдХреЛрдб рд╕реНрд╡рд░реВрдкрдг, рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рд░рд▓реАрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ
  • go_vet - рд╕рдВрджрд┐рдЧреНрдз рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ
  • gocyclo - рдЪрдХреНрд░реАрдп рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ
  • golint - рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ
  • рд▓рд╛рдЗрд╕реЗрдВрд╕ - рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкрд╛рд╕ рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  • рдЕрдкреНрд░рднрд╛рд╡реА - рдЕрдкреНрд░рднрд╛рд╡реА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ
  • misspell - рдЯрд╛рдЗрдкреЛрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ

100% рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ


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


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


рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдореЗрдореЛрд░реА рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, sqlite ( sqlx.Open("sqlite3", ":memory:") ), рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдб рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрдЬрди рд╕реЗ рдмрдВрдзрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИред


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


рд▓реЗрдЦрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ main.go рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдореЙрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкреБрдирдГ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


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


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


рдЧреЛ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ " рдЙрджрд╛рд╣рд░рдг рдлрд╝рдВрдХреНрд╢рдВрд╕ " рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ рд╣реИред рдпреЗ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреЗ рд╕рд╛рде рдЖрдЙрдЯрдкреБрдЯ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЧреЛ рдкреИрдХреЗрдЬ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдпрджрд┐ рдРрд╕реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЙрдкрд╕рд░реНрдЧ example_ рд╕рд╛рде рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ _test.go рд╕рд╛рде рд╕рдорд╛рдкреНрдд _test.go ред рдРрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдирд╛рдо Example рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкрд░, рдореИрдВрдиреЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрд╛, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ sql рд▓рд┐рдЦрддрд╛ рд╣реИ, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдПрдХ рдирдХрд▓реА рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреА рддреБрд▓рдирд╛ рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИред рдЖрд╕рд╛рдиреА рд╕реЗ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рддреБрд▓рдирд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд▓рд┐рдЦрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдпрд╣ рдПрдХ рдРрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрдпрд╛, рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ csv рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ, рддреЛ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред RFC4180 рдХреЗ рдЕрдиреБрд╕рд╛рд░ , CSV рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ CRLF рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ go fmt рдЬрдЧрд╣ LF рдХреЗ рд╕рд╛рде рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдорд╛рдирдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рд╛рдЗрди рдХреЗ рдХрд╛рд░рдг рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдорд┐рдд рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдерд╛, рдЬрдмрдХрд┐ example_ рд╕реЗ рдЗрд╕реЗ рд╣рдЯрд╛рдХрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рднреА рдерд╛ред


рдпрд╣ рд╕рд╡рд╛рд▓ рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рдпрджрд┐ рдлрд╝рд╛рдЗрд▓, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, query.go рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕рд╛рдзрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ query.go рд╣реИ, рддреЛ рдХреНрдпрд╛ рджреЛ рдлрд╝рд╛рдЗрд▓ example_query_test.go рдФрд░ query_test.go рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП? рдпрд╣рд╛рдБ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ example_test.go ред "рдЧреЛ рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг" рдХреА рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреА рднреА рдордЬреЗрджрд╛рд░ рд╣реИред


рдореИрдВрдиреЗ Google рдХреЛ "рдЧреЛ рд░рд╛рдЗрдЯрд┐рдВрдЧ рдЯреЗрд╕реНрдЯ" рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЧрд╛рдЗрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╕реАрдЦрд╛ред рдореИрдВ ( 1 , 2 , 3 , 4 ) рднрд░ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдиреЗ рдлреЙрд░реНрдо рдХреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдо рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛


 if v != 1.5 { t.Error("Expected 1.5, got ", v) } 

рд▓реЗрдХрд┐рди рдЬрдм рдпрд╣ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдПрдХ рдкрд░рд┐рдЪрд┐рдд рдирд┐рд░реНрдорд╛рдг "рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд" рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬреЛрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╛ рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг, рдЬрдм рдЖрдкрдХреЛ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЯреБрдХрдбрд╝рд╛ рдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рдореВрд▓реНрдп рд╣реИред рдХреЛрдб рдмреЛрдЭрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрджреНрдпрдкрд┐ рдпрд╣рд╛рдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдореБрдЭреЗ https://github.com/stretchr/testify рдорд┐рд▓рд╛ред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрдврд╝рдиреЗ рдФрд░ рд╕рдорд░реНрдерди рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред


рдХреЛрдб рд╡рд┐рдЦрдВрдбрди рдФрд░ рдкрд░реАрдХреНрд╖рдг


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


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


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


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


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


рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЗ 100% рдХрд╡рд░реЗрдЬ рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдерд╛ред рдореБрдЭреЗ 10 рдШрдВрдЯреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдЖрд╡реЗрджрди рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ 95% рдХрд╡рд░реЗрдЬ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ 20-30 рдШрдВрдЯреЗ рд▓рдЧреЗред рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХрд╛ рдореВрд▓реНрдп рдЗрд╕рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рдкреНрд░рдпрд╛рд╕ рд╣реЛрддрд╛ рд╣реИред


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


рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдФрд░ рдЙрди рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:



рд╕реНрдкреЙрдЗрд▓рд░

"рдХреЛрдЯрд┐рдВрдЧ" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрднрдЧ 20 рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдБред

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


All Articles