рд▓рд┐рдВрдЯрдкреИрдХ рдЬрд╛рдУ: рдХрдВрдкреЛрдЬрд┐рдЯ рд▓рд┐рдВрдЯрд░ рдореИрдиреЗрдЬрд░


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


рдЖрдЬ рд╣рдо рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ lintpack рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ lintpack рдХреНрдпрд╛ lintpack ред


рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЧреЛ-рдЖрд▓реЛрдЪрдХ рдереЗ ...


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


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


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


рдПрдХ рдФрд░ рдХрдард┐рдирд╛рдИ рдереА рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреАред рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рдФрд░ рдХреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рдЕрдкрдиреЗ рдЪреЗрдХ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ go-critic рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣рд╛рдВ рд╡реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ go-critic рд╡рд┐рдХрд╛рд╕ рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдереАрдВ:


  • рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рднрд╛рд░ред рдмрд╣реБрдд рд╕рдорд░реНрдерди, рдПрдХ рдорд╛рд▓рд┐рдХрд╣реАрди рдХреЛрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ред
  • рдХрдо рдФрд╕рдд рдЧреБрдгрд╡рддреНрддрд╛ред experimental рдЕрд░реНрде рд╣реИ "рд▓рдЧрднрдЧ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░" рдФрд░ "рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдЪрд▓рд╛рдирд╛ред"
  • рдХрднреА-рдХрднреА рдпрд╣ рддрдп рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЛ go-critic рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдореВрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд░реНрд╢рди рдХрд╛ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рд╣реЛрддрд╛ рд╣реИред
  • рдЕрд▓рдЧ go-critic рдЕрд▓рдЧ рд▓реЛрдЧреЛрдВ рдиреЗ go-critic рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рджреЗрдЦрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЗрд╕реЗ рдПрдХ рд╕реАрдЖрдИ рд▓рд┐рдВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдЬреЛ рдХрд┐ gometalinter рд╕рд╛рде рдЖрддрд╛ рд╣реИред

рдХрд┐рд╕реА рддрд░рд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдФрд░ рдЕрд╕рдВрдЧрдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдШреЛрд╖рдгрд╛рдкрддреНрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред


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

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


рдорд┐рд▓рдирд╛ - рд▓рд┐рдВрдЯрдкреИрдХ




go-critic рдореЗрдВ рджреЛ рдореБрдЦреНрдп рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ:


  1. рдЪреЗрдХреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡рдпрдВред
  2. рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдЧреЛ-рд╡реИрд▓рд┐рдб рдкреИрдХреЗрдЬ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрди рдкрд░ рд╕рддреНрдпрд╛рдкрди рдЪрд▓рд╛рддрд╛ рд╣реИред

рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп: рд╡рд┐рднрд┐рдиреНрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд▓рд┐рдВрдЯрд░ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ред


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


рдПрдХ рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ lintpack рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ рдХреЛ lintpack рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ lintpack рд╕рдВрдЧрдд рдпрд╛ lintpack - lintpack рдкреИрдХреЗрдЬред

рдпрджрд┐ go-critic рдХреЛ lintpack рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд╛рдЧреВ go-critic рдЧрдпрд╛ рдерд╛, рддреЛ рд╕рднреА рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рдХрдИ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:


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

рдЧреЛрд▓рдВрдЧреНрд╕реНрдХреА-рд▓рд┐рдВрдЯ рдореЗрдВ рдЧреЛ-рдЖрд▓реЛрдЪрдХ рдХреЗ рдПрдХреАрдХрд░рдг рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкрд╣рд▓рд╛ рдмрд┐рдВрджреБ рд╡рд┐рд╢реЗрд╖ рдорд╣рддреНрд╡ рдХрд╛ рд╣реИред


рдпрджрд┐ рдЖрдк go-critic рд╕реНрддрд░ рдкрд░ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред lintpack рд▓рдЧрднрдЧ рд╕рдорд╛рди рд▓рд┐рдВрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ golangci-lint рд╕рднреА рдЕрд▓рдЧ golangci-lint рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ golangci-lint рдХрд░рддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдирдП lintpack рдХреЛ lintpack рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓рд┐рдВрдЯрд░ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХрд╛ рд╕рдореГрджреНрдз рдЪрдпрди рд╣реЛрдЧрд╛ред рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдРрд╕рд╛ рд╣реИ, рдФрд░ рджреБрдирд┐рдпрд╛ рдореЗрдВ 10 рд╕реЗ рдЕрдзрд┐рдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреЗрдХ рд╣реИрдВред


рдЬрд▓реНрджреА рд╢реБрд░реВ рдХрд░реЛ



рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ lintpack рд╕реНрд╡рдпрдВ рд╕реНрдерд╛рдкрд┐рдд lintpack :


 # lintpack    `$(go env GOPATH)/bin`. go get -v github.com/go-lintpack/lintpack/... 

lintpack рд╕реЗ рдЯреЗрд╕реНрдЯ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд▓рд┐рдВрдЯрд░ рдмрдирд╛рдПрдВ:


 lintpack build -o mylinter github.com/go-lintpack/lintpack/checkers 

рд╕реЗрдЯ рдореЗрдВ panic(nil) рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдХреЛрдб рдореЗрдВ panic(nil) рдкрд╛рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП panicNil , рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ recover() рдпрд╣ рдмрддрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ panic рдХреЛ nil рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рдХреЛрдИ рдЖрддрдВрдХ рдирд╣реАрдВ рдерд╛ред


рдШрдмрд░рд╛рд╣рдЯ (рд╢реВрдиреНрдп) рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг


рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб recover() рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ recover() :


 r := recover() fmt.Printf("%T, %v\n", r, r) 

рдкрд░рд┐рдгрд╛рдо panic(nil) рдФрд░ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реЛрдЧрд╛ рдЬреЛ panic(nil) рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рд╡рд░реНрдгрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рд░рди рдЙрджрд╛рд╣рд░рдг ред




рдЖрдк рд▓рд╛рдЗрдирд░ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░, рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ./... рдпрд╛ рдкреИрдХреЗрдЬ (рдЙрдирдХреЗ рдЖрдпрд╛рдд рдкрде рджреНрд╡рд╛рд░рд╛)ред


 ./mylinter check bytes $GOROOT/src/bytes/buffer_test.go:276:3: panicNil: panic(nil) calls are discouraged 

 #   ,  go-lintpack    $GOPATH. mylinter=$(pwd)/mylinter cd $(go env GOPATH)/src/github.com/go-lintpack/lintpack/checkers/testdata $mylinter check ./panicNil/ ./panicNil/positive_tests.go:5:3: panicNil: panic(nil) calls are discouraged ./panicNil/positive_tests.go:9:3: panicNil: panic(interface{}(nil)) calls are discouraged 

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдЪреЗрдХ panic(interface{}(nil)) рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, skipNilEfaceLit рдХреЛ true рд╕реЗрдЯ рдХрд░реЗрдВред рдЖрдк рдЗрд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 $mylinter check -@panicNil.skipNilEfaceLit=true ./panicNil/ ./panicNil/positive_tests.go:5:3: panicNil: panic(nil) calls are discouraged 

рд╕реАрдПрдордбреА / рд▓рд┐рдВрдЯрдкреИрдХ рдФрд░ рдЙрддреНрдкрдиреНрди рд▓рд┐рдВрдЯрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ


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


 lintpack not enough arguments, expected sub-command name Supported sub-commands: build - build linter from made of lintpack-compatible packages $ lintpack build -help $ lintpack build -o gocritic github.com/go-critic/checkers $ lintpack build -linter.version=v1.0.0 . version - print lintpack version $ lintpack version 

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ рдмрдирд╛рдпреЗ рдЧрдП рд▓рд┐рдВрдЯрд░ рдХрд╛ рдирд╛рдо gocritic :


 ./gocritic not enough arguments, expected sub-command name Supported sub-commands: check - run linter over specified targets $ linter check -help $ linter check -disableTags=none strings bytes $ linter check -enableTags=diagnostic ./... version - print linter version $ linter version doc - get installed checkers documentation $ linter doc -help $ linter doc $ linter doc checkerName 

-help рдлрд╝реНрд▓реИрдЧ рдХреБрдЫ рдЙрдкрдЦрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдореИрдВрдиреЗ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрд╣реБрдд рдЪреМрдбрд╝рд╛ рдХрд╛рдЯ рджрд┐рдпрд╛):


 ./gocritic check -help #     . 



рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдЪреЗрдХ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг


рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм "рдмрд╣реБрдд рд╕реНрдХрд┐рдкрдиреЗрдЯрд╛рдЗрд▓рд╕рд┐рдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдкрддрд╛ рдХрд░реЗрдВ?" - рдлреИрдВрд╕реА рдореИрдиреБрдЕрд▓ (RTFM) рдкрдврд╝реЗрдВ!


рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдЪреЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ mylinter рдЕрдВрджрд░ рд╣реИрдВред рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬ doc рдЙрдкрдХрдорд╛рдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ:


 #     : $mylinter doc panicNil [diagnostic] #      : $mylinter doc panicNil panicNil checker documentation URL: github.com/go-lintpack/lintpack Tags: [diagnostic] Detects panic(nil) calls. Such panic calls are hard to handle during recover. Non-compliant code: panic(nil) Compliant code: panic("something meaningful") Checker parameters: -@panicNil.skipNilEfaceLit bool whether to ignore interface{}(nil) arguments (default false) 

go list -f рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рддрд░рд╣ go list -f , рдЖрдк рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬреЛ рдорд╛рд░реНрдХрдбрд╛рдЙрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд▓рд┐рдЦрддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХрд╣рд╛рдВ рджреЗрдЦреЗрдВ?


рдЙрдкрдпреЛрдЧреА lintpack рд╕реВрдЯ рдХреА рдЦреЛрдЬ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, lintpack рдХреА рдПрдХ рдХреЗрдВрджреНрд░реАрдпрдХреГрдд рд╕реВрдЪреА lintpack рд╕рдВрдЧрдд рдкреИрдХреЗрдЬ: https://go-lintpack.imtqy.com/ ред


рдпрд╣рд╛рдБ рдХреБрдЫ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ:



рдпрд╣ рд╕реВрдЪреА рд╕рдордп-рд╕рдордп рдкрд░ рдЕрджреНрдпрддрди рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реИред рд▓рд┐рдВрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдкреИрдХреЗрдЬ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЖрджреЗрд╢ рдПрдХ рд▓рд┐рдВрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╕реВрдЪреА рд╕реЗ рд╕рднреА рдЬрд╛рдВрдЪ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


 #   ,      #   Go . go get -v github.com/go-critic/go-critic/checkers go get -v github.com/go-critic/checkers-contrib # build   . lintpack build \ github.com/go-critic/go-critic/checkers \ github.com/go-critic/checkers-contrib 

lintpack build рдореЗрдВ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рд╕рднреА рдЬрд╛рдВрдЪ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд▓рд┐рдВрдЯрд░ рдХреЛ рдРрд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реНрдерд╛рдкрд┐рдд рдирд┐рджрд╛рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрд░реЛрдд рдХреЛрдб рдирд╣реАрдВ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реНрдереИрддрд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╣реИред


рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреИрдХреЗрдЬ рдЕрдЯреИрдЪрдореЗрдВрдЯ


рд╕реНрдереИрддрд┐рдХ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрддрд┐рд░рд┐рдХреНрдд рдЪреЗрдХ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред


рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдЪреЗрдХрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдереИрддрд┐рдХ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреЛрдб рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


рдорд╛рдирд╛ рдХрд┐ рд╣рдо рд▓рд┐рдВрдЯрд░ рдореЗрдВ panicNil рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрди рд╕рднреА рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЗрд╕рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░ рдкрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдкрд╣рд▓реЗ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


  1. linterPlugin.go рдмрдирд╛рдПрдБ:

 package main //         , //    import'. import ( _ "github.com/go-lintpack/lintpack/checkers" ) 

  1. рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдПрдБ:

 go build -buildmode=plugin -o linterPlugin.so linterPlugin.go 

  1. -pluginPath рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде -pluginPath рдЪрд▓рд╛рдПрдБ:

 ./linter check -pluginPath=linterPlugin.so bytes 

рдЪреЗрддрд╛рд╡рдиреА: рдЧрддрд┐рд╢реАрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдПрдХ рдкреНрд▓рдЧрдЗрди рдкреИрдХреЗрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

-verbose рдзреНрд╡рдЬ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдЪреЗрдХ рдЪрд╛рд▓реВ рд╣реИ рдпрд╛ рдмрдВрдж рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рдХрд┐рд╕ рдЪреЗрдХ рдиреЗ рдЪреЗрдХ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджрд┐рдпрд╛ рд╣реИред


рдЙрджрд╛рд╣рд░рдг -verbose рдХреЗ рд╕рд╛рде


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╢рд╛рдорд┐рд▓ рдЬрд╛рдБрдЪреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ panicNil рдкреНрд░рджрд░реНрд╢рд┐рдд panicNil ред рдЕрдЧрд░ рд╣рдо -pluginPath рддрд░реНрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рддреЛ рдпрд╣ рд╕рддреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред


 ./linter check -verbose -pluginPath=./linterPlugin.so bytes debug: appendCombine: disabled by tags (-disableTags) debug: boolExprSimplify: disabled by tags (-disableTags) debug: builtinShadow: disabled by tags (-disableTags) debug: commentedOutCode: disabled by tags (-disableTags) debug: deprecatedComment: disabled by tags (-disableTags) debug: docStub: disabled by tags (-disableTags) debug: emptyFallthrough: disabled by tags (-disableTags) debug: hugeParam: disabled by tags (-disableTags) debug: importShadow: disabled by tags (-disableTags) debug: indexAlloc: disabled by tags (-disableTags) debug: methodExprCall: disabled by tags (-disableTags) debug: nilValReturn: disabled by tags (-disableTags) debug: paramTypeCombine: disabled by tags (-disableTags) debug: rangeExprCopy: disabled by tags (-disableTags) debug: rangeValCopy: disabled by tags (-disableTags) debug: sloppyReassign: disabled by tags (-disableTags) debug: typeUnparen: disabled by tags (-disableTags) debug: unlabelStmt: disabled by tags (-disableTags) debug: wrapperFunc: disabled by tags (-disableTags) debug: appendAssign is enabled debug: assignOp is enabled debug: captLocal is enabled debug: caseOrder is enabled debug: defaultCaseOrder is enabled debug: dupArg is enabled debug: dupBranchBody is enabled debug: dupCase is enabled debug: dupSubExpr is enabled debug: elseif is enabled debug: flagDeref is enabled debug: ifElseChain is enabled debug: panicNil is enabled debug: regexpMust is enabled debug: singleCaseSwitch is enabled debug: sloppyLen is enabled debug: switchTrue is enabled debug: typeSwitchVar is enabled debug: underef is enabled debug: unlambda is enabled debug: unslice is enabled # ...   . 



рдЧреЛрдореЗрдЯрд╛рд▓реАрдирдЯ рдФрд░ рдЧреЛрд▓рдВрдЧрд╕реА-рд▓рд┐рдВрдЯ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛


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


gometalinter рдФрд░ golangci-lint рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓рд┐рдВрдЯрд░, рдЙрдиреНрд╣реЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред


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


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ golangci-lint рд╕рдВрдЧрдд рдЪреЗрдХ golangci-lint рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдпрджрд┐ рдЗрд╕рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ golangci-lint рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдпрд╣ рд╕реНрд╡рдпрдВ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдЧрд▓рддреА рд╣реИ, рддреЛ рдпрд╣ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓рд┐рдВрдЯрдкреЗрдХ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХ рддрдВрддреНрд░ред


рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреА рд╣реИрдВред


рдЧреЛ-рдЖрд▓реЛрдЪрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?


go-critic рдХреЛ lintpack рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рд▓реЗ рд╣реА рдкреВрд░реА рд╣реЛ рдЪреБрдХреА рд╣реИ, рдЪреЗрдХрд░реНрд╕ рдХреЛ рдЧреЛ-рдЖрд▓реЛрдЪрдХ / рдЪреЗрдХрд░реНрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 #  go-critic : go get -v github.com/go-critic/go-critic/... #  go-critic : lintpack -o gocritic github.com/go-critic/go-critic/checkers 

golangci-lint рдмрд╛рд╣рд░ go-critic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди lintpack рдЖрдкрдХреЛ рдЙрди рдЪреЗрдХреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ go-critic рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд рдирд┐рджрд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред


рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдП


рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЕрдкрдирд╛ lintpack рд╕рдВрдЧрдд рдЪреЗрдХ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ lintpack ред


рд╡рд╣рд╛рдВ рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдкрдиреЗ рд▓рд┐рдВрдЯрдкреИрдХ-рдЖрдзрд╛рд░рд┐рдд lintpack рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдлрд╛рдпрджреЗ рдорд┐рд▓рддреЗ рд╣реИрдВред


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

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


All Articles