ユウ
タイトルのエラーが出て困ったので、対処法をメモしておきます。
結論
私の場合、以下の手順で上記エラーを解消できました。
- (go.workがある場合)go.workを削除する
go mod init <MODULE_PATH>
を実行する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等を行うとうまくいきました。
具体的には、以下を行いました:
- go.workを削除する
- go mod init を実行する
- 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についてはまだ理解ができていないので、勉強しようかと思います。
以上、お役に立てれば幸いです。
コメント