Golangの入門として、「はじめてのGo シンプルな言語仕様、型システム、並行処理」のソースを実行したところ、「package gosample is not in GOROOT」というエラーメッセージが出力されてソースコードの実行できなかった。
あくまでも自分の環境に問題があった可能性もあるが、このエラーを解消するために実施したことを残しておく。
実行環境
実行環境は以下の通り。
OS / MW | Version |
---|---|
Mac | 11.4 |
Go | 1.16.3 |
問題解決のために実施したこと
主に2つのことを実施した。
- go mod コマンドでgo.mod を作成
- import先を変更
参考にしたページは公式ページの下記のページ。
このページでモジュールを外部ではなく、ローカルのモジュールを参照するように設定変更しているので参考にした。
解決方法
$GOPATH/src/gosample でgo.modを作成する。
$ go mod init example.com/gosample go: creating new go.mod: module example.com/gosample go: to add module requirements and sums: go mod tidy
$GOPATH/src/main/main.goでインポートしているgosampleをexample.com/gosampleに変更する。
これを
import ( "fmt" "gosample" )
下記のように変更する。
(gosample から example.com/gosample に変更)
import ( "fmt" "example.com/gosample" )
上記のように変更する。
次に、$GOPATH/src/main でgo.modを作成する
$ go mod init example.com/main go: creating new go.mod: module example.com/main go: to add module requirements and sums: go mod tidy
example.com/gosampleをローカルのgosampleを参照するようにgo.modを変更する
go mod edit -replace=example.com/gosample=../gosample go mod tidy
モジュールの依存関係を反映する。
go mod tidy go: found example.com/gosample in example.com/gosample v0.0.0-00010101000000-000000000000
実行して期待通りに動作することを確認
go run main.go hello world
最後に
記事が2015年に公開されており、それ以降にgo.modが導入されているため、バージョン差分による影響で実行できなかったと思う。
公開されている記事自体の内容は、わかりやすく初心者がGoの基本的な部分を理解するには最適な内容となっていると思う。
同じように初心者の人が記事を見て、実行できずに立ち止まらないように今後の参考になればいいなと思う。