ヒトリ歩き

愚痴とかいろいろ書きます

「はじめてのGo」の記事で実行出来なかった箇所を実行できるようにしてみた

Golangの入門として、「はじめてのGo シンプルな言語仕様、型システム、並行処理」のソースを実行したところ、「package gosample is not in GOROOT」というエラーメッセージが出力されてソースコードの実行できなかった。

gihyo.jp

あくまでも自分の環境に問題があった可能性もあるが、このエラーを解消するために実施したことを残しておく。

実行環境

実行環境は以下の通り。

OS / MW Version
Mac 11.4
Go 1.16.3

問題解決のために実施したこと

主に2つのことを実施した。

  • go mod コマンドでgo.mod を作成
  • import先を変更

参考にしたページは公式ページの下記のページ。

golang.org

このページでモジュールを外部ではなく、ローカルのモジュールを参照するように設定変更しているので参考にした。

解決方法

$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の基本的な部分を理解するには最適な内容となっていると思う。
同じように初心者の人が記事を見て、実行できずに立ち止まらないように今後の参考になればいいなと思う。