質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Q&A

解決済

1回答

948閲覧

Goの自作パッケージのローカルimport方法

JFS4jt09vy95UZ6

総合スコア13

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

0グッド

0クリップ

投稿2020/02/25 19:55

質問閲覧ありがとうございます。

質問内容

Goの一般的なインポート方法についてお教えください。

go modのreplace設定で、ローカルパッケージのインポートが出来たのですが、https://qiita.com/hinastory/items/336c2d944fdb8ae11efb
記事数の少なさや、Qiitaの記事などで、ほぼローカルインポートは使われておらず、
ほとんどの方が、リモートリポジトリからimportする記述方法でGoの記事をあげている様に見受けられます。

当方、完全独学のため、どっちの方が一般的か分からず、フォルダ構築に悩んでおります。

コミット・プッシュする前にローカルで最低限の動作確認を、行いたいと思うのですが、
Goではひとまずプッシュしてから確認するというのが一般的なのでしょうか。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

外部参照パッケージとルートに置くモジュールと自作のパッケージがあって、go modでオフラインのまま何も不自由なく手元でのテストできますよ。
ローカルパッケージインポートとは具体的にどうされているのか示してもらえると回答しやすいです。

ローカルパッケージの扱いが以下のどちらなのかがわかるとそれぞれの対応が決まると思います

  • 公開予定がある
  • 公開予定がない

公開予定がある

公開予定があるのであればそれはやはりクラウド上のリポジトリに置くのが一番スムーズです。
(おそかれはやかれやる事を後回しにしても問題の発見が遅れるだけです)
ローカル参照といったトリッキーなことはしない方が良いかと思います。

ただ、プライベートリポジトリに置いておいて後にパブリックリポジトリに変更という対応は可能です。
GitHubでssh認証の場合、以下のコマンドでプライベートリポジトリに対しても「go mod」が機能します。

shell

1git config --global url."ssh://git@github.com".insteadOf "https://github.com"

公開予定がない

公開予定がないのであれば、サブパッケージにしましょう。
例:

shell

1go mod init github.com/<user-name>/<module-name>

<リポジトリルート>/<sub-pkg-name>にサブパッケージのコードをおいておき、

以下のように書けばサブパッケージを利用できます。

go

1import "github.com/<user-name>/<module-name>/<sub-pkg-name>"

投稿2020/02/26 00:07

編集2020/02/27 01:09
nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobonobo

2020/02/26 00:13

ひとつのモジュールの中にサブモジュールを作るのは例示のリンク同様面倒になることが多いし、コード補完や静的解析ツールが動作しなくなることも多いのでお勧めしません。
JFS4jt09vy95UZ6

2020/02/27 22:41 編集

回答ありがとうございます。 まさかランキング1位の方から回答いただけると思っておりませんでした。 ありがとうございます。 余裕がございましたら、1点質問させていただければと思います。 ### 公開予定がない場合のimportについて 現在、自分のserverパッケージをご教示いただいた、 公開予定のないimport方法で試してみたのですが、 エラーとなってしまいます。 お助けいただければ幸いです。 以下情報です。 「現在エラーが出てるリポジトリ」 https://github.com/SeijiOmi/gin-template/tree/test ``` import "github.com/<user-name>/<module-name>/<sub-pkg-name>" ↓ import "go/src/github.com/SeijiOmi/gin-tamplate" ``` ソースのディレクトリは、 go/src/github.com/SeijiOmi/gin-tamplate です。 go build main.go を行うと こちらのエラーメッセージが表示されてしまいます。 ``` build command-line-arguments: cannot load github.com/SeijiOmi/gin-tamplate/server: git ls-remote -q https://github.com/SeijiOmi/gin-tamplate in /go/pkg/mod/cache/vcs/7b5a3e223620b8edf515b28e71fa744ddabd9682cec780bf63abe7158e59d845: exit status 128: fatal: could not read Username for 'https://github.com': terminal prompts disabled Confirm the import path was entered correctly. If this is a private repository, see https://golang.org/doc/faq#git_https for additional information. ``` 調べてみると、「プライベートリポジトリの設定が。」と出てきてしまいます。 パブリックリポジトリの設定のはずなのですが、エラーが消えません。 てっきり、サブパッケージで設定されている場合gitからcloneすることはないのかなと思ったのですが、 そうではないのでしょうか?
nobonobo

2020/02/27 22:42

import "go/src/github.com/SeijiOmi/gin-tamplate" ここにgo/srcが書かれているのはおかしいです。
nobonobo

2020/02/27 22:46

あとリポジトリを見ましたが、リポジトリルート=モジュールルートにだけgo.modを置く様にしてください。
nobonobo

2020/02/27 22:49

困ったらgithubで公開されているサンプルなどを参考にすると良いと思います。
JFS4jt09vy95UZ6

2020/02/28 00:14

ありがとうございます。 無事解決しました。 時間あるときに、解決策を挙げようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問