目次
git commit 前にコードが完了したかどうかを確認する必要があります。 特定のルールを満たしている場合は、手動で golangci-lint run ./... を実行するか、" > 次に、この時点で、git commit 前にコードが完了したかどうかを確認する必要があります。 特定のルールを満たしている場合は、手動で golangci-lint run ./... を実行するか、
ホームページ バックエンド開発 Golang golangci-lint をローカルで使用するためのソリューション

golangci-lint をローカルで使用するためのソリューション

Aug 04, 2023 pm 05:02 PM
言語を移動

なぜコードインスペクションが必要なのでしょうか?

一般に、コード インスペクションは次の 3 つの理由で重要です。

  1. 低レベルのバグを回避します。一般的なコードの問題が、事前に発見できない場合に発生します。コンパイルまたは実行中、コード内の構文上の問題はコンパイル エラーまたはランタイム エラーに直接つながり、開発効率とコードの品質に影響を及ぼします。

  2. 統一されたコーディング習慣: すべてのチームまたは一部のコード仕様またはコーディング習慣、後のメンテナンスと読み取りを容易にするために、作成するコードも特定の形式仕様に準拠する必要があります。 # オンライン コードの品質を確保する: バージョン管理では、コードが最終バージョンの要件を満たしていることを確認するために、送信または公開する前にコード チェック作業を自動的に実行する必要があります。

  3. golangci-lint

    golang は最高のコード検査ツールをサポートしており、golang オープン ソース ライブラリで広く使用されているため、これは説明できます。プロジェクトのより良い発展とその後のメンテナンスをより良くするために、私たちもそれを導入することを試みることができます。

goalngci-lint を使用しようとしたときの問題日常の開発プロセスでは、コード -> git add -> git commit - > が通常の動作です。 ; git Push ワンストップ サービス。

1. 手動実行モード:

次に、この時点で、git commit 前にコードが完了したかどうかを確認する必要があります。 特定のルールを満たしている場合は、手動で golangci-lint run ./... を実行するか、

git Push

の前にコード インスペクションを実行する必要があります。コミットとプッシュは毎日の操作であるため、頻繁に行われる可能性があり、この手動の方法はやや面倒です。使っているうちに、いろいろなことがあり、忘れてしまったり、面倒に感じて自分のコードに自信が持てずに直接実行しなかったりするかもしれません。ですので、全体的に使ってみても、まだ非常にエグみがあり、滑らかではないことを知っておく必要があります。 <h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"> <span style="display: none;"></span>2. gitlab ランナー モード: <span style="display: none;"></span> </h3> <blockquote data-tool="mdnice编辑器" style="border-top: none;border-right: none;border-bottom: none;font-size: 0.9em;overflow: auto;border-left-color: rgba(0, 0, 0, 0.4);background: rgba(0, 0, 0, 0.05);color: rgb(106, 115, 125);padding: 10px 10px 10px 20px;margin-bottom: 20px;margin-top: 20px;"><p style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;color: black;line-height: 26px;">私がこのソリューションを思いついた理由は、サーバーを使用するオープン ソース ライブラリをあまりにも多く見たためかもしれません。コードインスペクション (単なるPRですが)</p></blockquote> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">Dockerでgitlabを構築し、チュートリアルでランナーを設定しました。これには2日かかりましたが、gitlabとランナーのci構成を学ぶ必要がありました. ジョブの設定といくつかのツールのインストールを実行しましたが、満足のいく結果が得られない可能性があります。 </p> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;"> サーバーチェックの結果が gitlab 上にあると考えると、基本的に開発 (最初にコードをプルするとき) は gitlab に行かないことになります。では、このエラー メッセージはどのようにして該当者に届けられるのでしょうか?あるいは、複数人で関数を作成する場合、エラーはどのように割り当てられるのでしょうか?サーバーチェックを使用したこの解決策は、完了するまでに 2 日かかりました。 </p> <h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"> <span style="display: none;"></span>3. ローカルの事前コミット<span style="display: none;"></span> </h3> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">サーバーチェックが機能しないため、コードを送信する前にスクリプトをチェックします。コミットを許可しないことにより、エラーに対処する必要があります。ハハハ(このメカニズムは)、強制的に服従させることができるとは教えてくれません(慎重に使用してください)。 </p> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">これで、ローカルのコミット前スクリプトの作成が始まります。インターネットで情報を検索し、自分のニーズに基づいてプリコミット スクリプトを作成しました。主に 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);background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;'>fmt と codegolangci-lint がチェックされます。今度は絶対に成功すると思ってました!

この時点でスクリプトは記述されていますが、サーバーにアップロードするにはどうすればよいでしょうか? .git フォルダーはデフォルトではサーバーにアップロードできないため、init.sh スクリプトを記述してアップロードするしかありません。すべての開発者 初めてプロジェクトを取得するときは、それを実行してローカルで構成するだけでよく、これは非常に簡単です。

golangci-lint をローカルで使用するためのソリューション

を実行してみてください。 。 。結果はうまくいきません。ここの言葉では私の気持ちを言い表すことはできません。

一連の操作の結果、golangci-lint は単一ファイルのチェックをサポートしていないことがわかりました。

私のスクリプト チェックの原則は次のとおりです:

  1. 現在のコミットで変更されたすべての go ファイルをフィルタリングします

  2. 各ファイルを一度実行してくださいgolangci-lint run xxx.go

これは恥ずかしいです; このスクリプトの作成は私にとって少し複雑なので(それほど難しくはありません)、最初はスクリプトを使用して、すべてのファイルが配置されているフォルダーをフィルターで除外し、そのフォルダー上でのみ実行したいと考えていました。もちろん、golangci-lint の実行プロセスに時間がかかるという問題もあります。コミットごとに 1 分間待つ必要があるとは言えません。これにより、釣りの時間が隠れて増加します。[/ドージェ]。

4. ローカルの事前コミット事前プッシュ

何度も検討した結果、比較的以前のソリューションが最終的に誕生しました。私たちの方法です。

デフォルトの gitook の場所を、init.sh を通じて、作成した githooks フォルダーに変更します。特定の操作については、スクリプトを表示できます。内容. 脚本は非常にわかりやすいと思います。

pre-commit を通じて、fmt および import チェックと自動フォーマットを提供し、それらを自動的に追加して、自分でフォーマットすることを忘れる操作を回避します。

pre-push を使用して、プロジェクトが使用可能な状態でサーバーにプッシュされているかどうかを確認します。プッシュはそれほど頻繁ではないため、この時点でプロジェクト全体の検査が使用されます。

以上がgolangci-lint をローカルで使用するためのソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GOの浮動小数点番号操作に使用されるライブラリは何ですか? GOの浮動小数点番号操作に使用されるライブラリは何ですか? Apr 02, 2025 pm 02:06 PM

GO言語の浮動小数点数操作に使用されるライブラリは、精度を確保する方法を紹介します...

Go's Crawler Collyのキュースレッドの問題は何ですか? Go's Crawler Collyのキュースレッドの問題は何ですか? Apr 02, 2025 pm 02:09 PM

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? Apr 02, 2025 pm 12:57 PM

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Apr 02, 2025 pm 02:03 PM

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? Apr 02, 2025 pm 04:12 PM

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Apr 02, 2025 pm 04:54 PM

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Apr 02, 2025 pm 05:09 PM

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

GoおよびViperライブラリを使用するときにポインターを渡す必要があるのはなぜですか? GoおよびViperライブラリを使用するときにポインターを渡す必要があるのはなぜですか? Apr 02, 2025 pm 04:00 PM

ポインター構文とviperライブラリの使用における問題への取り組みGO言語でプログラミングするとき、特にポインターの構文と使用を理解することが重要です...

See all articles