web-dev-qa-db-ja.com

GOPATHベースのdepからgo to modに移行するときに、最初のパス要素に不正なモジュールパス「xxxx / xxxx / uuid」のドットがない

 $ go version 
 1.13.3 

次のようなフォルダ構造があります。

GOPATH
+---src
     +--- my-api-server
           +--- my-auth-server
                 +--- main.go
           +--- my-utils
                 +--- uuid
                       +--- uuid.go

my-auth-serverは、依存関係としてmy-api-server/my-utils/uuidを使用します

さて、GOPATHベースのモジュールシステムを使用すると、これは正常に機能しました。しかし、goモジュールを使用しているときにgo run main.gomy-auth-serverを実行すると、エラーが返されました。

build command-line-arguments: cannot load my-api-server/my-utils/uuid: malformed module path "my-api-server/my-utils/uuid": missing dot in first path element

これを解決する方法はありますか?

12
Ayush Gupta

_go.mod_ファイルはプロジェクトのルートにある必要があります(この場合は_my-api-server/go.mod_)。

モジュールパスの最初の部分はドメイン/パスである必要があります。たとえば、フルパスは_github.com/your-github-username/my-api-server_のようになります。表示されているエラーは、最初の部分がドメイン(ピリオド)ではないためです。開発するためにモジュールを公開する必要はありませんが、適切なドメイン名を使用する必要があります。

モジュールパスを取得したら、フルモジュールパス+ "/" +パッケージの相対パスを使用して、そのモジュールに含まれるパッケージをインポートできます。例えば、

_import "github.com/your-github-username/my-api-server/my-utils/uuid"
_

_main.go_とuuidは同じモジュールに含まれているので、requireを使用するために_go.mod_ファイルにuuidステートメントは必要ありませんパッケージ。他のパッケージと同じようにインポートでき、機能します。

_go build_を使用するよりも、_go run_を使用して結果の実行可能ファイルを実行することをお勧めします。これにより、ビルドプロセスに必要なすべてのファイルを含めることができます。

方法についてのシリーズの 2番目の投稿 を含むGoモジュールの使用方法のウォークスルーについては、 https://blog.golang.org/using-go-modules を参照してください。モジュールを使用するようにプロジェクトを変換します。

8

Main.goファイルのインポートパスを確認します。私の側で機能させるには、インポートパス全体を[プロジェクト名]/viewsではなく「github.com/ [ユーザー名]/[プロジェクト名]/views」と呼ぶ必要がありました。

1
Nathaniel Rand