実現したいこと
Go Modulesでのローカルパッケージのインポート
- 別ディレクトリにあるローカルのパッケージのインポート
前提
GO言語の勉強をしており、書籍にはGOPATHでのローカルパッケージのインポートを行っていましたが、調べてみるとGo Modulesを使ってインポートが出来るようなので、そちらでインポートしたいです。
ファイル構成:(わかりにくくてすみません!)
pkg
ーーー>hello
ーーーーーー>hello.go
ーーーーーー>go.mod
src
ーーー>main.go
ーーー>go.mod
pkg/hello/go.mod
module hello go 1.20 replace( learning.com/hello => [絶対パス]\GO\pkg\hello )
src/go.mod
module src go 1.20
src/main.go(importの部分)
GO
1import ( 2 "fmt" 3 "hello" 4)
行ったこと:
- hello.go、main.goを作成
- それぞれのgo.modを作成
- pkg/hello/go.modにreplace文を追加
- src/にてgo build実行(失敗)
- go get learning.com/hello実行(失敗)
発生している問題・エラーメッセージ
go buildを行うと、
no required module provides package learning.com/hello; to add it: go get learning.com/hello
なので go get learning.com/helloを行ったが、
unrecognized import path "learning.com/hello": reading https://learning.com/hello?go-get=1: 404 Not Found
補足情報(FW/ツールのバージョンなど)
GO version:1.20.7
書籍
参考にした書籍の情報 (著者、タイトル、出版社、ページ) を記してください。
このコメント欄に書くのではありません。質問文を編集して書き加えてください。
今回の質問にその情報は不必要、また書籍のコードは載せてはいけないだろうと思って諸々省いたのですが、このようなコメントをされた意図を知りたいです。
回答する側にとっては必要です。参考にした書籍にもともと書いてあったコードや説明はどんなもので、質問者さんの考えで書いたのがどこなのかがわからないと、回答を考えられないです。
つまり、質問中で「この本には○○と書いてあった」ということをぼかしたり省略したりするのではなく、きちんと原文通りに**引用**してもらわないと、著者の書いたことを正しくとらえられないです。
ちなみに、著作物の引用は、正当な範囲内でなら許可なくできます (下記参照)。つまり、「この本には○○と書いてありましたが、それを参考に私は○○と考えてみました。どうでしょうか?」といったことを書くのは自由です。
https://www.bunka.go.jp/seisaku/chosakuken/seidokaisetsu/gaiyo/chosakubutsu_jiyu.html
もちろん正当な範囲内なので、今回の質問に関係ない箇所まで書き写すとかいうのはだめなのは当然です。
今回だとどこの部分が理解に苦しむ部分でしたか?それに合わせて追記させていただきます。
今回の質問に回答できない要因をお教えいただきたいです。
> 書籍にはGOPATHでのローカルパッケージのインポートを行っていましたが、
の場合のgo.modはどんな内容だったのでしょうか。引用して示してください。
また、書籍ではsrc/go.modとpkg/hello/go.modの両方があったのでしょうか。書籍ではなかったが自分で付け足したものもあるのでしょうか。
全て読み切ったわけではないので断定はできないですが、go.modについての記述は一切ありませんでした。
go.modについては記事を中心に自分で何となく作ったものです。
https://zenn.dev/optimisuke/articles/105feac3f8e726830f8c
https://qiita.com/hnishi/items/a9217249d7832ed2c035
などの記事を読みました
なるほど。書籍ではワークスペースモードのみ解説していたのですね。
上のうち、Zennの記事はGoのバージョンがちょっと古いですね。
あと、Qiitaの記事は、サブパッケージを使えばいいのにわざわざgo.modを用意しているために複雑なことをしています。これについてはこちらの記事もご覧ください。
https://zenn.dev/nobonobo/articles/1d4afb9f4e8873
しかし、HHHXXXさんの環境でgo getが実行できたというのがちょっと不思議ですね。go versionを実行した結果はどうなりますか。
1.20.7です
本当だ。仮のgo.modを作って実行したら同じエラーメッセージが出ました。モジュール内**以外**でのgo getは廃用ということですね。回答訂正しておきます。
いろいろと細かいことをお尋ねしましたが、同じような問題にぶつかったひとがこの質問と回答を見て参考にしてもらえるようにするためです。私自身は普段、仕事としてこの種の質問をお客様から受けて回答することもあるのですが、質問したひとだけのために回答するのなら無料ではやらないですもんね。
また質問してください (私が回答するとはかぎりませんが)。
他社への配慮、意識が薄かったです。勉強になりました、ありがとうございます。

回答1件
あなたの回答
tips
プレビュー