おことわり
とても恥ずかしいミスだったのですが、即解決のダイレクトな記事がなかったので残しておきます。
結論
packageのルートディレクトリ(ex. my_package)で、GO111MODULE="on"
になるようにしてから
go mod init my_package
を実行する。(そもそもアンダースコア使っていいのか、、、?)
ルートディレクトリ内で、ルートディレクトリ自身の名前を指定することがパッと思いつかなかった。
あとtouch
とかで自分で勝手に作っちゃダメ!(やってしまった)
状況
- アプリケーション(=main.goがある)リポジトリばかり触っていた
- フレームワークのプロジェクトgenerateコマンドがgo.modを勝手に作ってくれてた
今までこんな状況だったので、いざ自分がpackageを0から作るとなった時に、
pacakge内でgo test
ひいてはgo get
を実行できなかった。
ちなみに
よそのパッケージからgo getしようと思ったら、
go.modの1行目には
module github.com/{Githubのorganization名orアカウント名}/my_package
という風に書き変えなければならない。
初期状態だと
module my_package
のはずだが、
この状態のまま他所からmy_packageをgo getしようとすると
$ go get -u "github.com/{Githubのorganization名orアカウント名}/my_package"
go: finding github.com/{Githubのorganization名orアカウント名}/my_package latest
go: downloading github.com/{Githubのorganization名orアカウント名}/my_package v0.0.0-{略}
go: extracting github.com/{Githubのorganization名orアカウント名}/my_package v0.0.0-{略}
go get: github.com/{Githubのorganization名orアカウント名}/my_package@v0.0.0-{略}: parsing go.mod:
module declares its path as: my_package
but was required as: github.com/{Githubのorganization名orアカウント名}/my_package
という感じで怒られる。