LoginSignup
1
0

IS NOT IN GOROOTのエラーが発生した時の解決方法

Posted at

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()

}

分かってしまえば簡単なことですが、Goのコンパイル時の動作などを知らないと、ハマってしまいます。(自分だけ???)
自分もまだ完全に理解しているわけではないので、日々勉強していこうと思います。
誤りなどあれば、コメントにて指摘をお願いします。

今回はこれで以上となります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0