Goの新しいモジュールシステムを試していますが、ローカルパッケージにアクセスできません。次のプロジェクトは、gopath以外のデスクトップ上のフォルダーにあります。
私のプロジェクト構造は次のようになります。
/
- /platform
- platform.go
- main.go
- go.mod
// platform.go
package platform
import "fmt"
func Print() {
fmt.Println("Hi")
}
// main.go
package main
import "platform"
func main() {
platform.Print()
}
go build main.go
教えて
cannot find module for path platform
これらの問題をすぐに処理できるgoツールチェーンを使用することを強くお勧めします。 vscode-goプラグインを使用したVisual Studio Codeは非常に便利です。
ここでの問題は、Goがimportステートメントの$GOPATH/src
またはmodule
に関して相対パスを必要とすることです。 GOPATH
のどこにいるかに応じて、インポートパスにもそれを含める必要があります。この場合、importステートメントにはgo.mod
のgoモジュールパスを含める必要があります
GOPATH
プロジェクトがここにあると仮定します。
$GOPATH/src/github.com/myuser/myproject
インポートパスは次のとおりです。
import "github.com/myuser/myproject/platform"
VGO
Go.modファイルが次のとおりであると仮定します。
module example.com/myuser/myproject
インポートパスは次のとおりです。
import "example.com/myuser/myproject/platform"
この最初のmodules
はpackages
のコレクションです。 Go 11では、次のように go modules を使用します。
両方のパッケージが同じプロジェクトにある場合は、次のことを行うことができます:go.mod
:
module github.com/userName/moduleName
そしてmain.go
の中に
import "github.com/userName/moduleName/platform"
ただし、それらが別々のモジュール、つまり異なる物理パスであり、たとえばgithubにリモートで公開せずにローカルpackages
をインポートしたい場合は、replace
ディレクティブを使用してこれを実現できます。
モジュール名github.com/otherModule
およびplatform
を指定すると、その中にある唯一のパッケージです。メインモジュールのgo.mod
に次の行を追加します。
module github.com/userName/mainModule
require "github.com/userName/otherModule" v0.0.0
replace "github.com/userName/otherModule" v0.0.0 => "local physical path to the otherModule"
注:パスはモジュールのルートディレクトリを指す必要があり、絶対パスまたは相対パスを指定できます。
main.go
内で、platform
からotherModule
などの特定のパッケージをインポートするには:
import "github.com/userName/otherModule/platform"
Golangモジュールの 穏やかな紹介