go モジュールの使用方法
go モジュールは go 1.14 バージョンの後に起動されました
1. go モジュールの使用方法の概要
go モジュール
は Go1.11 バージョン以降に正式にリリースされたバージョン管理ツールで、Go1.13 バージョンからは go module
が Go 言語のデフォルトの依存関係管理ツールになります。
1.1 GO111MODULE
go module
サポートを有効にするには、まず環境変数 GO111MODULE
を設定する必要があります。これにより、モジュールをオンまたはオフにできます。これには 3 つのオプション値があります: off
、on
、auto
、デフォルト値は auto
です。
GO111MODULE=off
モジュール サポートを無効にし、コンパイル時にGOPATH
フォルダーとvendor
フォルダーからパッケージを検索します。GO111MODULE=on
モジュール サポートを有効にすると、GOPATH
およびvendor
フォルダーはコンパイル時に無視され、ベースのみが使用されます。 ongo.mod
依存関係を%GOPATH%/pkg/mod/
ディレクトリにダウンロードします。GO111MODULE=auto
(プロジェクトが$GOPATH/src
の外にあり、プロジェクトのルート ディレクトリにgo.mod# がある場合) ## ファイルで、モジュールのサポートを有効にします。
GO111MODULE=on を設定した後、
go module を使用できるようになります。GOPATH にプロジェクトを作成する必要はありません。また、プロジェクトが依存するサードパーティのパッケージ情報も適切に管理できます。
go.mod と
go.sum がプロジェクトのルート ディレクトリに生成されます。
にアクセスできないため、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 、もちろん、
のように、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 <=v2.2.1
github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
latest</pre>
1.5 go getプロジェクトで
コマンドを実行して依存関係パッケージをダウンロードします。ダウンロードしたバージョンを指定することもできます。
go get -u
を実行すると、最新のマイナー バージョンまたはリビジョンにアップグレードされます (x.y.z、z はリビジョン番号、y はマイナー バージョン番号)実行
go get -u=patch
- 実行
go get package@version
は指定されたバージョン番号にアップグレードされます。 version すべての依存関係をダウンロードする場合は、
go mod download コマンドを使用できます。 1.6 依存関係の整理
コード内の依存コードを削除した後、関連する依存ライブラリは
ファイルから自動的に削除されません。この場合、go mod tiny
コマンドを使用して、
の依存関係を更新できます。
1.7 go mod editフォーマット
go.mod ファイルは手動で変更できるため、場合によってはファイルをフォーマットする必要があります。 Go には次のコマンドが用意されています。
<pre class="brush:php;toolbar:false">replace (
golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac
golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d
golang.org/x/text v0.3.0 => 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
- を実行して現在のプロジェクトの依存関係を検索して記録し、
go.sum
を生成して各依存ライブラリのバージョンとハッシュ値を記録します。 1.8.2 新しいプロジェクト 新しく作成したプロジェクトの場合、プロジェクト フォルダーで次の手順を実行できます。<ol> <li>执行<code>go mod init 项目名
命令,在当前项目文件夹下创建一个go.mod
文件。- 手动编辑
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() 函数