package is not in GOROOT

package is not in GOROOT

2021-03-02
golang

一時的にGOPATHを変更してから、パッケージを2個作ったうえで簡単なコードを実行した時、次のようなエラーが出ました。

% package other/pkg1 is not in GOROOT (/usr/local/go/src/other/pkg1)

パッケージの構造が原因です。パッケージを1つにまとめることで解消できます。

エラー

エラーが出たときのディレクトリ構造です。

${GOPATH}/src
|-- other
|   |-- go.mod
|   `-- pkg1
|       `-- pkg1.go
`-- prj
    |-- go.mod
    `-- main.go

other/pkg1GOPATH内にありますが、パッケージの構造が不正なためprjパッケージから参照できません。

各ファイルの内容は次の通り。

prj/main.go

package main

import "other/pkg1"

func main()  {
	pkg1.Func()
}

other/pkg1/pkg1.go

package pkg1

import "fmt"

func Func() {
	fmt.Println("called func in pkg1")
}

対応

otherprj内に含めることでエラーを解消できます。

${GOPATH}/src
`-- prj
    |-- go.mod
    |-- main.go
    `-- other
        `-- pkg1
            `-- pkg1.go

prj/main.go

package main

import "prj/other/pkg1"

func main()  {
	pkg1.Func()
}