[GO言語] no required module provides packageのエラーが出て困った

GO
ユウ
ユウ

タイトルのエラーが出て困ったので、対処法をメモしておきます。

結論

私の場合、以下の手順で上記エラーを解消できました。

  1. (go.workがある場合)go.workを削除する
  2. go mod init <MODULE_PATH>を実行する
  3. go mod tidyを実行する

※go.workがない場合、上記2,3のみ実行すれば解消できるかと思います。

詳細

現在、以下のテキストでGO言語の勉強をしています。

「9.3 パッケージの構築」で以下のディレクトリ構成のサンプルコードがあります。

ch09 % tree       
.
└── package_example
    ├── formatter
       └── formatter.go
    ├── go.mod
    ├── go.work
    ├── main.go
    └── math
        └── math.go

各ファイルは以下のとおりです。

go.mod

module example.co.jp/package_example

go 1.21.1

main.go

package main

import (
	"fmt"
	"example.co.jp/package_example/formatter" // パッケージprint
	"example.co.jp/package_example/math" // パッケージmath
)

func main() {
	num := math.Double(2)  // パッケージmath(math/math.go)
	output := print.Format(num) // パッケージprint(formatter/formatter.go)
	fmt.Println(output)
}

math.go

package math

func Double(a int) int {
	return a * 2
}

formatter.go

package print

import "fmt"

func Format(num int) string {
	return fmt.Sprintf("数字は%dです。", num)
}

go.work

go 1.21.1

この状態でgo run main.goを実行しても以下のエラーが出ていました。

(x86_64) package_example % go run main.go    
main.go:5:2: no required module provides package example.co.jp/package_example/formatter: go.mod file not found in current directory or any parent directory; see 'go help modules'
main.go:6:2: no required module provides package example.co.jp/package_example/math: go.mod file not found in current directory or any parent directory; see 'go help modules'

なお、go.workはテキストのサンプルコードには含まれていなかったのですが、私が色々と操作しているうち追加してしまっていたようです。

色々試行錯誤した結果、go.workを削除し、go mod init等を行うとうまくいきました。

具体的には、以下を行いました:

  1. go.workを削除する
  2. go mod init を実行する
  3. go mod tidyを実行する

実際のコードは以下のとおりです。

package_example % rm go.work
package_example % go mod init example.co.jp/package_example
go: creating new go.mod: module example.co.jp/package_example
go: to add module requirements and sums:
        go mod tidy
package_example % go mod tidy
package_example % go run main.go
数字は4です。

私の場合、go.workが原因だったようです。

go.workがない場合は、上記手順の2,3を実行すればよいかと思います。

go.workについてはまだ理解ができていないので、勉強しようかと思います。

以上、お役に立てれば幸いです。

プロフィール
この記事を書いた人

30代半ばで未経験でプログラマーに転職し、日々奮闘中です
プログラミング、AI、NLP、キャリア関連などで少しでも役に立てる情報を発信していきます

ユウをフォローする
GO
ユウをフォローする

コメント

タイトルとURLをコピーしました