◇ 流れ
【Go言語】packageを作成
↓
importに「./XXXXX」でパス指定
↓
実行
↓
「cannot find module for path」と怒られる
↓
解決
◇ ディレクトリ構成
GOPATH
┣━ bin
┣━ pkg
┗━ src
┗━ test
┣━ route
┃ ┗━ route.go
┣━ go.mod
┗━ main.go
◇ go環境
ターミナル
$ go version
go version go1.13.4 windows/amd64
$ go env
set GO111MODULE=on
set GOBIN=C:\GOPATH\bin
set GOENV=C:\Users\XXXXXX\AppData\Roaming\go\env
set GOEXE=.exe
set GOHOSTARCH=amd64
set GOOS=windows
set GOPATH=C:\GOPATH
set GOROOT=C:\Go
◇ go.mod を作成。
プロジェクトルートに、$ go mod init
でgo.mod
を作成。
ターミナル
$ cd C:\GOPATH\src\test
$ go mod init
go: creating new go.mod: module test
go.mod
module test
go 1.13
◇ main.go と route パッケージを作成。
main.go
package main
import "./route"
func main() {
route.Route()
}
route/route.go
package route
import (
"github.com/labstack/echo"
"net/http"
)
func Route() {
e := echo.New()
e.GET("/", getHandler)
e.Logger.Fatal(e.Start(":1323"))
}
// サイトを表示させる
func getHandler(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
}
◇ 実行
ターミナル
go run main.go
go: finding golang.org/x/crypto latest
build _/c_/GOPATH/src/test/route: cannot find module for path _/c_/GOPATH/src/test/route
cannot find module for path
とエラーがでて怒られた。。。
パスはあっているのに何故か、
package の読み込みが出来ていないのでかなり詰まりました。
↓↓↓↓↓ 解決策 ↓↓↓↓↓↓
go.mod
にmoduleの名前があるので
「./route」を「test/route」に置き換える
go.mod
module test ← moduleの名前
go 1.13
main.go
package main
import "./route" → "test/route" に変更
func main() {
route.Route()
}
参考サイト
go 1.11のmodules(vgo)が有効な環境で相対importが cannot find module for path でエラーになった話。
https://pod.hatenablog.com/entry/2018/12/26/074944