Maison  >  Article  >  développement back-end  >  Solution pour utiliser golangci-lint localement

Solution pour utiliser golangci-lint localement

Golang菜鸟
Golang菜鸟avant
2023-08-04 17:02:291148parcourir

Pourquoi avons-nous besoin d'inspections de code ?

De manière générale, l'inspection du code est importante pour trois raisons :

  1. Évitez les bogues de bas niveau : certains problèmes de code courants, s'ils ne sont pas découverts à temps avant la compilation ou l'exécution, les problèmes grammaticaux dans le code mèneront directement à la compilation ou à l'exécution. erreurs, affecte l'efficacité du développement et la qualité du code ;

  2. Habitudes de codage unifiées : chaque équipe ou individu aura des spécifications ou des habitudes de codage afin de faciliter la maintenance et la lecture ultérieures, le code que nous écrivons doit également se conformer. certaines spécifications de format ;

  3. Assurer la qualité du code en ligne : dans la gestion des versions, nous devons effectuer automatiquement un travail de vérification du code avant la soumission ou la publication pour garantir que notre code répond aux exigences de la version finale.

golangci-lint est le meilleur outil de vérification de code pris en charge par golang, et il est largement utilisé dans les bibliothèques open source de golang. Cela montre que pour un meilleur développement du projet et une meilleure maintenance dans la période ultérieure, nous pouvons également essayer. pour le présenter. golangci-lint作为 golang 支持最好的代码检查工具,而且在golang开源库中,有着大量的使用,由此可以说明为了项目更好的进行开发,和后期更好的维护,我们也可以尝试着引入它。

尝试使用 goalngci-lint 的问题

我们再日常的开发过程中,习惯的行为是:code -> git add -> git commit -> git push 一条龙服务。

1. 手动执行模式:

那么这个时候需要在 git commit 之前检查我们的代码是否已经符合一定的规则,就需要手动执行 golangci-lint run ./... ,或者在 git push

🎜🎜Questions sur l'utilisation de goalngci-lint🎜🎜Dans notre processus de développement quotidien, notre comportement habituel est : code -> git add -> git commit -> 🎜

🎜🎜1.

🎜 Ensuite, à ce moment-là, vous devez ajouter git commit Avant de vérifier si notre code a respecté certaines règles, nous devons l'exécuter manuellementgolangci-lint run ./..., ou en git push pour la révision du code avant. Puisque nos commit et push sont des opérations quotidiennes, elles sont susceptibles d'être fréquentes, et cette méthode manuelle est quelque peu lourde. Au cours du processus d'utilisation, en raison de certaines choses, vous pouvez l'oublier ou ne pas l'exécuter directement, vous sentant gêné et confiant dans votre propre code. Donc après l'avoir utilisé dans son ensemble, il est encore très emm. Il faut savoir qu'il n'est pas lisse. 🎜

2. Mode runner de Gitlab :

La raison pour laquelle j'ai pensé à cette solution est peut-être que j'ai vu trop de bibliothèques open source utiliser l'inspection de code de serveur (même si ce n'est que des relations publiques)

Construire un gitlab via docker et configuré le runner via le tutoriel, ce qui m'a pris 2 jours. Cependant, j'avais besoin d'apprendre la configuration ci de gitlab, la configuration du travail du runner et l'installation de certains outils, mais les résultats peuvent ne pas être satisfaisants.

En pensant que les résultats de la vérification du serveur sont sur gitlab, notre développement (la première fois que nous extrayons le code) n'ira pas sur gitlab, alors comment ce message d'erreur peut-il être transmis à la personne correspondante ? Ou si plusieurs personnes écrivent une fonction, comment attribuer les erreurs ? Cette solution utilisant la vérification du serveur a mis 2 jours à être adoptée.

3. Pré-engagement local

Étant donné que la vérification du serveur ne fonctionne pas, j'effectuerai une vérification du script avant de soumettre le code. S'il y a une erreur, il ne sera pas soumis. pour gérer vos erreurs. Hahaha (le mécanisme) ne vous dira pas que vous pouvez forcer la soumission (utilisez-le avec prudence).

Cela commence l'écriture du script de pré-commit local. J'ai recherché des informations sur Internet et écrit un script de pré-validation basé sur mes propres besoins. Principalement le codefmt et code<code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb (30, 107, 184);couleur d'arrière-plan : rgba(27, 31, 35, 0.05);famille de polices : " operator mono consolas monaco menlo monospace de mot break-all> vérification golangci-lint. Je pensais que j'y arriverais certainement cette fois-ci ! fmt和代码golangci-lint 检查。心想这次一定能成!

这时,脚本写好了,但是改怎么上传到服务器呢,由于.git 文件夹作为默认不可上传到服务器,只有写一个 init.sh 的脚本来上传服务器了,所有开发人员在第一次获取项目的时候只需要执行一下,本地的配置就好了,这就简单很多了。

试着跑了一下:

Solution pour utiliser golangci-lint localement

。。。结果不得行。此处文字已经不能表达我的心情了。

经过一系列的操作后,发现golangci-lint

À l'heure actuelle, le script est écrit, mais comment le télécharger sur le serveur ? Puisque le dossier .git ne peut pas être téléchargé sur le serveur par défaut, le seul moyen est d'écrire un script init.sh pour le télécharger sur le serveur. serveur. Tous les développeurs doivent le télécharger sur le serveur pour la première fois. Lors de la récupération du projet, il vous suffit de l'exécuter et de le configurer localement, ce qui est beaucoup plus simple.

Essayez d'exécuter :
    Solution pour utiliser golangci-lint localement
  1. . . . Le résultat ne fonctionne pas. Les mots ici ne peuvent pas exprimer mes sentiments.

    Après une série d'opérations, j'ai trouvé que golangci-lint ne prend pas en charge la vérification de fichiers individuels.

    🎜Le principe de ma vérification de script est le suivant : 🎜🎜🎜🎜🎜Filtrer tous les fichiers go modifiés dans le commit en cours🎜
  2. Exécuter une fois pour chaque fichiergolangci-lint run xxx.gogolangci-lint run xxx.go

这就尴尬了;后面本来想通过脚本来过滤出所有文件所在的文件夹,只针对文件夹来跑,由于写这个脚本对于我来说有点复杂(不会这个难的)了。当然还有一个问题是 golangci-lint 的执行过程需要很长的时间,不能说每次commit都等个1分钟,这不就变相增加摸鱼时间了[/doge] 。

4. 本地 pre-commit + pre-push

经过多番折腾,终于诞生了一个相对前面方案,非常适合我们的一种方式。

通过 init.sh 修改默认git hook 位置到 我们创建的 githooks 文件夹,具体的操作可以查看脚本内容,我觉得脚本写的还是挺明确的。

通过 pre-commit 提供 fmt 和 import 的检查和自动格式化再自动添加,避免一些忘记自己格式化的操作。

通过pre-push

C'est embarrassant ; je voulais à l'origine utiliser un script pour filtrer les dossiers où se trouvent tous les fichiers, et l'exécuter uniquement sur les dossiers, car écrire ce script est un peu compliqué pour moi (pas que difficile) ). Bien sûr, il y a un autre problème : golangci-lint prend beaucoup de temps. Nous ne pouvons pas dire que nous devons attendre 1 minute pour chaque commit. Cela augmentera le temps de pêche déguisé[/doge].

4. Pré-validation locale + pré-push

Après de nombreuses tentatives, nous avons finalement trouvé une solution qui nous convient relativement.

viainit.sh Modifier la valeur par défautgit hook emplacement dans le githooks dossier, spécifique à vous peut voir le contenu du script via l'opération. Je pense que le script est assez clair.

viapre-commit Fournit une inspection fmt et d'importation et un formatage automatique Ajouté pour éviter certaines opérations où vous oubliez de vous formater.

viapre-push pour vérifier si le projet est poussé à l'état où il peut être utilisé côté serveur. Comme les poussées ne sont pas si fréquentes, l'inspection de l'ensemble du projet est utilisée à ce moment-là.

🎜🎜🎜🎜🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer