ホームページ  >  記事  >  バックエンド開発  >  goモジュールとは何ですか?使い方? (使用例付き)

goモジュールとは何ですか?使い方? (使用例付き)

藏色散人
藏色散人転載
2022-01-12 16:02:395394ブラウズ

この記事は、go モジュールの使用方法を紹介する golang チュートリアル コラムによって提供されており、困っている友人の役に立てば幸いです。

go モジュールの使用方法

go モジュールは go 1.14 バージョンの後に起動されました

1. go モジュールの使用方法の概要

go モジュール は Go1.11 バージョン以降に正式にリリースされたバージョン管理ツールで、Go1.13 バージョンからは go module が Go 言語のデフォルトの依存関係管理ツールになります。

1.1 GO111MODULE

go module サポートを有効にするには、まず環境変数 GO111MODULE を設定する必要があります。これにより、モジュールをオンまたはオフにできます。これには 3 つのオプション値があります: offonauto、デフォルト値は auto です。

  • GO111MODULE=offモジュール サポートを無効にし、コンパイル時に GOPATH フォルダーと vendor フォルダーからパッケージを検索します。

  • GO111MODULE=onモジュール サポートを有効にすると、GOPATH および vendor フォルダーはコンパイル時に無視され、ベースのみが使用されます。 on go.mod依存関係を %GOPATH%/pkg/mod/ ディレクトリにダウンロードします。

  • GO111MODULE=auto (プロジェクトが $GOPATH/src の外にあり、プロジェクトのルート ディレクトリに go.mod# がある場合) ## ファイルで、モジュールのサポートを有効にします。

簡単に言えば、

GO111MODULE=on を設定した後、go module を使用できるようになります。GOPATH にプロジェクトを作成する必要はありません。また、プロジェクトが依存するサードパーティのパッケージ情報も適切に管理できます。

go モジュールを使用して依存関係を管理すると、2 つのファイル

go.modgo.sum がプロジェクトのルート ディレクトリに生成されます。

1.2 中国では共和党の /proxy.golang.org

にアクセスできないため、GOPROXY をセットアップすることを強くお勧めします。ここでは goproxy.cn を使用することをお勧めします。

export GOPROXY=https://goproxy.cn

1.3 go mod コマンド

一般的に使用される go mod コマンドは次のとおりです。 <pre class="brush:php;toolbar:false">go env -w GOPROXY=https://goproxy.cn,direct</pre>1.4 go.mod

go .mod ファイルにはプロジェクトのすべての依存関係情報が記録されており、その構造はおおよそ次のとおりです。

go mod download    下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
go mod edit        编辑go.mod文件
go mod graph       打印模块依赖图
go mod init        初始化当前文件夹, 创建go.mod文件
go mod tidy        增加缺少的module,删除无用的module
go mod vendor      将依赖复制到vendor下
go mod verify      校验依赖
go mod why         解释为什么需要依赖

このうち、

module

は、次の目的で使用されます。パッケージ名を定義します

require

依存パッケージとバージョンを定義するために使用されます
  • indirect間接参照を示します
  • 1.4 .1 依存バージョン
  • go mod は、
  • go get foo@v1.2.3 などのセマンティック バージョン番号をサポートするか、go などの git ブランチまたはタグを後に続けることができます。 get foo@master
  • 、もちろん、
go get foo@e3702bed2

のように、git commit ハッシュをたどることもできます。依存バージョンに関しては、次の形式がサポートされています:

module github.com/Q1mi/studygo/blogger

go 1.12

require (
    github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586
    github.com/gin-gonic/gin v1.4.0
    github.com/go-sql-driver/mysql v1.4.1
    github.com/jmoiron/sqlx v1.2.0
    github.com/satori/go.uuid v1.2.0
    google.golang.org/appengine v1.6.1 // indirect
)

1.4.2 replace 中国の golang.org/x にアクセスする各パッケージは、ファイアウォールをバイパスする必要があります。これを github 上の対応するライブラリに置き換えます。 <pre class="brush:php;toolbar:false">gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 gopkg.in/vmihailenco/msgpack.v2 v2.9.1 gopkg.in/yaml.v2 &lt;=v2.2.1 github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e latest</pre>1.5 go getプロジェクトで

go get

コマンドを実行して依存関係パッケージをダウンロードします。ダウンロードしたバージョンを指定することもできます。

go get -u

を実行すると、最新のマイナー バージョンまたはリビジョンにアップグレードされます (x.y.z、z はリビジョン番号、y はマイナー バージョン番号)

実行 go get -u=patch

は最新リビジョンにアップグレードされます
  1. 実行 go get package@version は指定されたバージョン番号にアップグレードされます。 version
  2. すべての依存関係をダウンロードする場合は、go mod download
  3. コマンドを使用できます。
  4. 1.6 依存関係の整理
  5. コード内の依存コードを削除した後、関連する依存ライブラリは
go.mod

ファイルから自動的に削除されません。この場合、go mod tiny コマンドを使用して、

go.mod

の依存関係を更新できます。

1.7 go mod editフォーマットgo.mod ファイルは手動で変更できるため、場合によってはファイルをフォーマットする必要があります。 Go には次のコマンドが用意されています。 <pre class="brush:php;toolbar:false">replace ( golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac =&gt; github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac     golang.org/x/net v0.0.0-20180821023952-922f4815f713 =&gt; github.com/golang/net v0.0.0-20180826012351-8a410e7b638d     golang.org/x/text v0.3.0 =&gt; github.com/golang/text v0.3.0 )</pre>依存関係の追加

go mod edit -fmt

依存関係の削除

go.mod

ファイルの内容を変更するだけの場合

go mod edit -droprequire=package path

を実行できます。たとえば、

go.mod の

golang.org/x/text

パッケージを削除したい場合は、

、次のコマンドを使用できます: <pre class="brush:php;toolbar:false">go mod edit -require=golang.org/x/text</pre>go mod edit のその他の使用法は、go help mod edit で確認できます。 1.8 プロジェクトで go モジュールを使用する

1.8.1 既存のプロジェクト既存のプロジェクトで go module を有効にする必要がある場合は、次のことができます。以下の手順に従います。

プロジェクト ディレクトリで

go mod init

を実行して、

go.mod ファイルを生成します。

    go get
  1. を実行して現在のプロジェクトの依存関係を検索して記録し、go.sum を生成して各依存ライブラリのバージョンとハッシュ値を記録します。
  2. 1.8.2 新しいプロジェクト
  3. 新しく作成したプロジェクトの場合、プロジェクト フォルダーで次の手順を実行できます。<ol> <li>执行<code>go mod init 项目名命令,在当前项目文件夹下创建一个go.mod文件。
  4. 手动编辑go.mod中的require依赖项或执行go get自动发现、维护依赖。

二、包和调用文件在同一项目下

例如:

moduledemo
├── go.mod
├── main.go
└── mypackage
    └── mypackage.go  // package mp 定义包名为 mp

步骤:

1.在项目下创建一个 go.mod 文件,文件名只能为这个。

2.在 go.mod 文件中添加以下代码

module moduledemo  // 设定 moduledemo 为包根目录名,可以随意改变该名字,只需要导入时一致就好
go 1.14  // 表明版本

3.导入想要的包文件

import "moduledemo/mypackage"  // 这里是导入包目录下的包文件名

4.使用包文件

mp.MyPackage()  // 使用包中的 MyPackage() 函数

三、包和被调用文件不在同一个项目下

例如:

├── moduledemo
│   ├── go.mod
│   └── main.go
└── mypackage
    ├── go.mod
    └── mypackage.go  // package mp 定义包名为 mp

步骤

1.在 mypackage 下面创建 go.mod 文件,并添加以下代码

module mypackage

go 1.14

2.在 moduledemo 下面创建 go.mod 文件,并添加以下代码

module moduledemo

go 1.14


require mypackage v0.0.0  // 这个会在你执行 go build 之后自动在该文件添加
replace mypackage => ../mypackage  // 指定需要的包目录去后面这个路径中寻找

3.导入和使用

import "mypackage"  // 因为该包目录本身就是包文件所以无需添加下一级路径

mp.MyPackage()  // 使用包中的 MyPackage() 函数

以上がgoモジュールとは何ですか?使い方? (使用例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。