Go パッケージの依存関係管理ツールである govendor についての簡単な説明
govendor は、vendor
メカニズムに基づく Go パッケージの依存関係管理コマンド ライン ツールです。ネイティブ ベンダーとの非侵入的な統合、および他の依存関係管理ツールからの移行もサポートしており、異なるプロジェクトでの同じパッケージの異なるバージョンの開発と管理を、相互侵入することなく簡単に実現できます。
ベンダーの機能
当初、Go はこれより適切なパッケージ管理ツールを提供していませんでした。ベンダー機能はバージョン 1.5 から提供されていますが、環境変数 GO15VENDOREXPERIMENT=1
を手動で設定する必要があります。
go build
または go run
コマンドを実行すると、パッケージは次の順序で検索されます。
- 次の順序でパッケージが検索されます。現在のパッケージのディレクトリ
- src の下にベンダー ディレクトリが見つかるまで上のディレクトリを検索します。
- GOROOT ディレクトリを検索します。
- GOPATH の下にある依存パッケージを探します
バージョン 1.6 がリリースされたとき、この環境変数の値はデフォルトで 1 に設定されていました。この値は、go env
コマンドを使用して表示できます。
バージョン 1.7 がリリースされたとき、この環境変数は削除され、vendor
機能がデフォルトで有効になりました。
ベンダーの使用に関する推奨事項
- ライブラリ プロジェクト (
main
を含まないpackage
) は、外部ファイルを独自のバージョンで保存しないでください。 control 特別な理由がなく、これを行う理由がわかっている場合を除き、パッケージはvendor
ディレクトリにあります。 -
アプリケーション (
main
を含むpackage
) では、vendor
ディレクトリを 1 つだけ存在することをお勧めします。コードベースレベルのディレクトリにあります。関連チュートリアル: go ビデオ チュートリアル
govendor の概要
govendor は、vendor## に基づくディレクトリです。 # メカニカルパッケージ管理ツール。
- プロジェクトのソース コードからの依存パッケージの分析と、
- $GOPATH
からプロジェクトの
vendorディレクトリへのコピーをサポートします
サポートされていますパッケージのバージョンを指定し、パッケージとバージョンの管理に - vendor/vendor.json
を使用します。これは、PHP の
Composer が - govendor を使用してサポートするのと同様です。 add/ update
コマンドは、
$GOPATH から依存パッケージをコピーします。 - vendor/*/
ファイルが無視される場合は、
govendor を使用できます。 syncは依存関係を復元します。 パッケージ
は直接使用できます。 - govendor fetch
は依存パッケージを追加または更新します。
利用可能な - govendor merge
は他のパッケージから使用できます。
vendorパッケージ管理ツール
govendor へのワンクリック移行 Linux、macOS、Windows、さらには既存のすべてのオペレーティング システムをサポート - Git、 Hg、SVN、BZR (パスを指定する必要があります)
- プロジェクトは
- にある必要があります。 $GOPATH/src
directory
Go バージョンが 1.5 の場合は、環境変数 - set GO15VENDOREXPERIMENT=1
go get -u github.com/kardianos/govendor
利便性と迅速な使用のために、
govendor を PATH に $GOPATH/bin
を追加することをお勧めします。 Linux/macOS の設定は次のとおりです。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>export PATH="$GOPATH/bin:$PATH"</pre><div class="contentsignin">ログイン後にコピー</div></div>
Initialization
Initialization のプロジェクト ルート ディレクトリで次のコマンドを実行します。プロジェクトのルート ディレクトリ、つまり vendor
ディレクトリと
ファイルが自動的に生成されます。この時点で、vendor.json
ファイルの内容は次のとおりです。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>govendor init</pre><div class="contentsignin">ログイン後にコピー</div></div>
Common Commands
$GOPATH## の下にあります。 # パッケージを
vendor- ディレクトリにコピーします
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>{ "comment": "", "ignore": "test", "package": [], "rootPath": "govendor-example" }</pre><div class="contentsignin">ログイン後にコピー</div></div>
指定されたパッケージのみを
$GOPATH
- #コード内で参照されているすべてのパッケージとそのステータスをリストします
govendor add gopkg.in/yaml.v2
ログイン後にコピーgovendor list
ログイン後にコピー
govendor add +external
e github.com/gin-contrib/sse e github.com/gin-gonic/gin e github.com/gin-gonic/gin/binding e github.com/gin-gonic/gin/internal/json e github.com/gin-gonic/gin/render e github.com/golang/protobuf/proto e github.com/mattn/go-isatty e github.com/ugorji/go/codec e gopkg.in/go-playground/validator.v8 e gopkg.in/yaml.v2 pl govendor-example m github.com/json-iterator/go m golang.org/x/sys/unix
ログイン後にコピーgovendor list -v fmt
ログイン後にコピー
- はコピーを
- $GOPATH に保存しません)
- 指定されたバージョンのpackage
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>govendor fetch golang.org/x/net/context</pre><div class="contentsignin">ログイン後にコピー</div></div>
プロジェクト独自のコードのみをフォーマットします (
s fmt ├── e github.com/gin-contrib/sse ├── e github.com/gin-gonic/gin ├── e github.com/gin-gonic/gin/render ├── e github.com/golang/protobuf/proto ├── e github.com/ugorji/go/codec ├── e gopkg.in/go-playground/validator.v8 ├── e gopkg.in/yaml.v2 └── pl govendor-example
- ディレクトリは変更しません)
govendor fetch golang.org/x/net/context@a4bbce9fcae005b22ae5443f6af064d80a6f5a55 govendor fetch golang.org/x/net/context@v1 # Get latest v1.*.* tag or branch. govendor fetch golang.org/x/net/context@=v1 # Get the tag or branch named "v1".
- ビルドとプロジェクトの内部コードをコンパイルします。 パッケージ
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>govendor fmt +local</pre><div class="contentsignin">ログイン後にコピー</div></div>
プロジェクト内のテスト ケースのみをテストします。
govendor install +local
- パッケージ
govendor test +local
- すべての依存パッケージを
- vendor
ディレクトリにプルします (
$GOPATH 既存または存在しないパッケージを含む)
パッケージはすでに
vendorディレクトリにありますが、
$GOPATH
govendor install +vendor,^program
- ## から更新したいと考えています#変更されました
$GOPATH
ここで、変更されてコミットされていないパッケージをvendor
govendor fetch +out
govendor update +vendor
- パッケージにフォークして更新したいのですが、まだマージされていません。どうすればよいですか? 最新のコード パッケージ
govendor update -uncommitted <updated-package-import-path>
ログイン後にコピーを参照すると、
normal ではなく
- からコードがプルされるようになります。
vendor.json は、依存関係パッケージの情報、更新を取得する方法を記録します
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>govendor fetch github.com/normal/pkg::github.com/myfork/pkg</pre><div class="contentsignin">ログイン後にコピー</div></div>govendor サブコマンド<ul>各詳しい使用方法については、サブコマンドについては、<li>govendor COMMAND -h<code> を使用するか、
github.com/kardianos/govendor/context を参照して、ソース コード パッケージがどのように実装されているかを確認できます。
子指令 | 功能 |
---|---|
#init | ## 建立 vendor 目錄和 vendor.json 檔案
|
列出&過濾依賴包及其狀態 | |
從 | $GOPATH 複製套件到專案 vendor 目錄
|
#從 | $GOPATH 更新依賴套件到專案vendor 目錄
|
從 | vendor 目錄移除依賴的套件
|
列出所有缺失、過期和修改過的套件 | ## fetch |
vendor | 目錄(不會儲存到$GOPATH)
| sync
vendor.json | 拉取相符的套件到vendor 目錄 ##migrate |
實作的套件管理工具中一鍵遷移 |
#get |
類似,將套件下載到 | $GOPATH,再將依賴套件複製到vendor 目錄
license |
shell | |
指令 |
| govendor 狀態參數
意義 | ||
---|---|---|
local | ||
本地包,即專案內部所寫的套件 | external e 外部包,即在 | GOPATH|
目錄 | ## vendor | ##v
|
#已在 | vendor | 目錄下的套件
| std
標準庫裡的套件 | excluded | |
#明確被排除的外部套件 | unused | |
#未使用的套件,即在 | vendor 目錄下,但專案中並未引用到 |
missing |
被引用了但卻找不到的套件 | p |
outside
#相當於狀態為
external missing
all ###所有套件################支援狀態參數的子指令有:###list## #、###add###、###update###、###remove###、###fetch#########Go modules######普大喜奔的是,從Go 1.11 版本開始,官方已內建了更為強大的Go modules 來一統多年來Go 包依賴管理混亂的局面(Go 官方之前推出的dep 工具也幾乎胎死腹中),並且將在1.13版本中正式預設開啟。 ######目前已受到社群的看好和強烈推薦,建議新專案採用 Go modules。 ###
以上がGo パッケージの依存関係管理ツールである govendor についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









Go ではファイルを安全に読み書きすることが重要です。ガイドラインには以下が含まれます。 ファイル権限の確認 遅延を使用してファイルを閉じる ファイル パスの検証 コンテキスト タイムアウトの使用 これらのガイドラインに従うことで、データのセキュリティとアプリケーションの堅牢性が確保されます。

Go データベース接続の接続プーリングを構成するにはどうすればよいですか?データベース接続を作成するには、database/sql パッケージの DB タイプを使用します。同時接続の最大数を制御するには、MaxOpenConns を設定します。アイドル状態の接続の最大数を設定するには、ConnMaxLifetime を設定します。

Go フレームワークは、その高いパフォーマンスと同時実行性の利点で際立っていますが、比較的新しい、開発者エコシステムが小さい、一部の機能が欠けているなどの欠点もあります。さらに、急速な変化と学習曲線はフレームワークごとに異なる場合があります。 Gin フレームワークは、効率的なルーティング、組み込みの JSON サポート、強力なエラー処理機能により、RESTful API を構築するための一般的な選択肢です。

ベスト プラクティス: 明確に定義されたエラー タイプ (エラー パッケージ) を使用してカスタム エラーを作成する 詳細を提供する エラーを適切にログに記録する エラーを正しく伝播し、非表示または抑制しないようにする コンテキストを追加するために必要に応じてエラーをラップする

JSON データは、gjson ライブラリまたは json.Unmarshal 関数を使用して MySQL データベースに保存できます。 gjson ライブラリは、JSON フィールドを解析するための便利なメソッドを提供します。json.Unmarshal 関数には、JSON データをアンマーシャリングするためのターゲット型ポインターが必要です。どちらの方法でも、SQL ステートメントを準備し、データをデータベースに永続化するために挿入操作を実行する必要があります。

GoLang フレームワークと Go フレームワークの違いは、内部アーキテクチャと外部機能に反映されています。 GoLang フレームワークは Go 標準ライブラリに基づいてその機能を拡張していますが、Go フレームワークは特定の目的を達成するための独立したライブラリで構成されています。 GoLang フレームワークはより柔軟であり、Go フレームワークは使いやすいです。 GoLang フレームワークはパフォーマンスの点でわずかに優れており、Go フレームワークはよりスケーラブルです。ケース: gin-gonic (Go フレームワーク) は REST API の構築に使用され、Echo (GoLang フレームワーク) は Web アプリケーションの構築に使用されます。

Go フレームワークで一般的なセキュリティ問題に対処する方法 Web 開発で Go フレームワークが広く採用されているため、そのセキュリティを確保することが重要です。以下は、一般的なセキュリティ問題を解決するための実践的なガイドであり、サンプル コードも含まれています。 1. SQL インジェクション SQL インジェクション攻撃を防ぐには、プリペアド ステートメントまたはパラメータ化されたクエリを使用します。例: constquery="SELECT*FROMusersWHEREusername=?"stmt,err:=db.Prepare(query)iferr!=nil{//Handleerror}err=stmt.QueryR

FindStringSubmatch 関数は、正規表現に一致する最初の部分文字列を検索します。この関数は、最初の要素が一致した文字列全体で、後続の要素が個々の部分文字列である、一致する部分文字列を含むスライスを返します。コード例: regexp.FindStringSubmatch(text,pattern) は、一致する部分文字列のスライスを返します。実際のケース: 電子メール アドレスのドメイン名を照合するために使用できます。たとえば、email:="user@example.com", pattern:=@([^\s]+)$ を使用してドメイン名を照合します。 [1]。