いくつかの未知の理由ではなく、すべてのパケットが直接取りに行くために得ることができ、その後、私達は行くモジュールの機能を交換する必要があります。(もちろん、問題のほとんどは、はしごを掛ける解決することができ、我々はまた、他のオプションを持つことができます)
交換用のパッケージを置き換える使用します
示唆名を置き換え、それらは異なるパッケージすることができ、または同じパッケージの異なるバージョンであってもよいし、別のパッケージに新しいパッケージに置き換えられます。基本的な構文を見てください:
MOD編集-replaceを行く=旧[@v] =新しい[@v]
古い、新しい、パッケージに置き換えられるパッケージを置き換えるために使用されます。
ここで注意すべきいくつかのポイントは以下のとおりです。
- 外出先のツールが自動的にMODファイルは失敗につながる可能性が更新されたときにように、古いパッケージを使用しないように、新しい依存関係を導入した直後に行われるべきで置き換えます
- パッケージのバージョンの後ろに省略することができません。(編集すべての操作に必要なバージョンタグ)
- バージョンがマスターであるか、または最新の、両方が利用可能に取りに行くが、MOD編集認識できないエラーが行くことはできません。(ドキュメントがgo1.12がポイント改善措置を行うことを期待してそう示すことができますが、私は、バグを知りません)
これらの理由から、我々は次のようになります。ステップのパッケージを置き換えます:
- まず、(あなたはバージョンタグパッケージを知っていれば、このステップは、あなたが最新バージョンを使用したいとバージョン番号を確認したくない場合は、この手順を必要とする、実際には省略することができる)新しいパッケージを取りに行きます
- その後、go.modを表示手動で新しいパッケージのバージョン番号を(あなたはバージョン番号を知っていれば、このステップは非常にユーザーフレンドリーであることができなかった、そしておそらく将来は改善されますスキップ)をコピー
- その後、MOD整頓を行ったり、ビルドを行ったり、他の囲碁のツールを使用し、彼らは新しいパッケージを取得するために行くと、古いパッケージを置き換えます
- 最後に、golangが自動的にあなたのプログラムが実際に成功を交換し、新しいパッケージを使用します。それから、置き換える認識して、古いパッケージの名前で直接あなたのコードを使用します
ここではまだ例のchromedpを使用した例を実行します。
例
chromedpは、このパッケージには、一般的に直接の買収ではないですが、私たちは鏡に置き換えることを置き換える使用して、それは、ミラーgithub.com/golang/imageを持って、golang.org/x/imageを使用しました。
の場合に代わるものではありません依存している場合、状況で見てみましょう:
はい、私たちは、あなたがそれを得ることができない場合は、記録が来ることはありません、もちろん、オリジナルのパッケージを使用しています。
のは、その鏡像を取得してみましょう:
#マスターはコミット最新を取得
ゴーGET github.com/golang/image@master
その後、我々はバージョン番号を参照してください。
猫go.mod
バージョン番号で、我々は交換することができるようになります。
編集モード-replace = golang.org / X /画像@ v0.0.0-20180708004352-c73c2afc3b81 = github.com / golang /画像@ v0.0.0-20180708004352-c73c2afc3b81を行きます
今、私たちはgo.mod見て:
交換する情報が更新されました、そして今、私たちは私たちのコードは、新しいパッケージを使用することができ、MOD整頓や、外出先ビルドを行きます。
更新go.sumは、ミラー依存に置き換えられました。
今のところ、go1.12それでそのパフォーマンスを見て、唯一の機能のすべてのテストフェーズの後、人類のようなものを取りに行くためにはるかに簡単にやって交換してください。
交換用のパッケージを置き換える使用します
示唆名を置き換え、それらは異なるパッケージすることができ、または同じパッケージの異なるバージョンであってもよいし、別のパッケージに新しいパッケージに置き換えられます。基本的な構文を見てください:
MOD編集-replaceを行く=旧[@v] =新しい[@v]
古い、新しい、パッケージに置き換えられるパッケージを置き換えるために使用されます。
ここで注意すべきいくつかのポイントは以下のとおりです。
- 外出先のツールが自動的にMODファイルは失敗につながる可能性が更新されたときにように、古いパッケージを使用しないように、新しい依存関係を導入した直後に行われるべきで置き換えます
- package后面的version不可省略。(edit所有操作都需要版本tag)
- version不能是master或者latest,这两者go get可用,但是go mod edit不可识别,会报错。(不知道是不是bug,虽然文档里表示可以这么用,希望go1.12能做点完善措施)
基于以上原因,我们替换一个package的步骤应该是这样的:
- 首先go get new-package(如果你知道package的版本tag,那么这一步其实可以省略,如果想使用最新的版本而不想确认版本号,则需要这一步)
- 然后查看go.mod,手动复制new-package的版本号(如果你知道版本号,则跳过,这一步十分得不人性化,也许以后会改进)
- 接着go mod tidy或者go build或者使用其他的go tools,他们会去获取new-package然后替换掉old-package
- 最后,在你的代码里直接使用old-package的名字,golang会自动识别出replace,然后实际你的程序将会使用new-package,替换成功
下面我们仍然用chromedp的example做一个示例。
示例
chromedp使用了golang.org/x/image,这个package一般直连是获取不了的,但是它有一个github.com/golang/image的镜像,所以我们要用replace来用镜像替换它。
我们先来看看如果不replace的情况下的依赖情况:
没错,我们使用了原来的包,当然如果你无法获取到它的话是不会被记录进来的。
下面我们go get它的镜像:
# master表示获取最新的commit
go get github.com/golang/image@master
然后我们查看版本号:
cat go.mod
有了版本号,我们就能replace了:
go mod edit -replace=golang.org/x/[email protected]=github.com/golang/[email protected]
现在我们查看一下go.mod:
replace信息已经更新了,现在我们只要go mod tidy或者go build,我们的代码就可以使用new-package了。
更新后的go.sum,依赖已经替换成了镜像:
目前来看,replace做的远不如go get那样方便人性化,不过毕竟还只是测试阶段的功能,期待一下它在go1.12的表现吧。