【Go言語】作成したpackageをimportして使用。「cannot find module for path」エラー時の解決


◇ 流れ

【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 initgo.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