IS NOT IN GOROOTのエラーが発生した時の解決方法
GoのAPIを開発していて、割と初期に発生し、少しハマったので、記事として残しておきます。
初学者や、久々にGo書いていて、色々忘れているって人に多いんじゃないかと感じたエラーでした。
※まあ自分が忘れてただけってものあるんですがwwwww
現象
GoのAPIを開発していて、以下のようなエラーが発生しました。
$ main.go:4:2: package go_project/internal/controllers is not in GOROOT (/usr/local/go/src/go_project/internal/controllers)
フォルダ構成
GO_PROJECT
├── cmd
│ └── go_pro
│ └── main.go
└── internal
└── controllers
└── codemst_controller.go
原因
go.modのmoduleに設定されているルートパスを指定せずにフォルダ構成のパスでimportしようとしていた。
これで。Goのコンパイラが、Controllersのフォルダってどこやねん!となってエラーを吐いていた。
実際のコード
cmd¥go_pro¥main.go
package main
import (
"go_project/internal/controllers"
)
func main() {
controllers.CodemstController()
}
internal¥controllers¥codemst_controller.go
package controllers
import (
"fmt"
)
func CodemstController() {
fmt.Println("Hello World")
}
go.mod
module go_pro
go 1.20
修正後のコード
importのパスをgo.modのmoduleに設定されているルートパスを指定するように修正する。
cmd¥go_pro¥main.go
package main
import (
"go_pro/internal/controllers"
)
func main() {
controllers.CodemstController()
}