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

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

ただいまの
回答率

91.23%

  • Go

    350questions

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

depで$GOPATH/src/github.com/〜の下に置いたpackageを無視する方法について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 223

k.tada

score 1392

Golangに最近手を出し始めた初心者なので、そもそもの前提がおかしかったりしたらすみません。

GolangをDocker(docker-compose)を使って動かしています。
Package managerとしてdepを利用しています。

Golangで自作packageをimportする際、相対パスによるimportではなく、
プロジェクトを$GOPATH/src/github.com/{author}/{project name}の下に配置して、
import "github.com/{author}/{project name}/{package name}"のようにimportするのが良いとうかがったのですが、
この状態でdep ensureを実行すると

Could not introduce github.com/{author}/{project name}@master, as its subpackage {author}/{project name}/{package name} is missing. (Package is required by (root).)


のようなエラーが発生し、importすることが出来ません。

dep ensuregithub.com〜の下に配置したpackageをimportしようとしていることが原因かと思うのですが、解消する方法が見つからず悩んでおります。

この問題の解消方法を教えていただけないでしょうか。

現時点でのコードは下記のとおりです。

Dockerfile

FROM golang:1.9.2-alpine

ENV GOBIN /go/bin

ADD . /go/src/github.com/{author}/{project name}/
WORKDIR /go/src/github.com/{author}/{project name}

RUN apk add --no-cache git \
  && go get -u github.com/golang/dep/cmd/dep \
  && go get -u github.com/codegangsta/gin \
  && dep ensure -v

CMD gin -p 9999

docker-compose.yml

version: '3'

services:
  app:
    container_name: app
    build:
      context: ./
      dockerfile: Dockerfile
    volumes:
      - ".:/go/src/github.com/k-tada/todo-api-server"
      - '/go/src/github.com/k-tada/todo-api-server/vendor'
    environment:
      PORT: 9999
    ports:
      - '9999:9999'

Gopkg.toml

[[constraint]]
  name = "github.com/gin-gonic/gin"
  version = "1.2.0"

main.go

package main

import (
    "github.com/gin-gonic/gin"
    "os"

    "github.com/{author}/{project name}/routes"
)

func main() {
    r := gin.Default()
    r.GET("/", routes.List)
    port := os.Getenv("PORT")
    if len(port) == 0 {
        port = "9999"
    }
    r.Run(":" + port)
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

{author} や {project name} には実際に質問者さんが使っている GitHub のアカウント名やプロジェクト名(push済み)の物を入れておられるのでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/15 10:59

    はい、そうです。すでにGithubにPushしているプロジェクトですが、開発途中でまだPushしていないソースを読み込もうとしたときにエラーが発生します。

    キャンセル

  • 2018/01/15 11:28

    dep ensure -vendor-only で試して貰えますか。

    キャンセル

  • 2018/01/18 20:22

    返信が遅くなってしまい申し訳ありません。
    dep ensure -vendor-only試しました。当該エラーは発生しなくなりましたが、ソースからimportしている別のパッケージもインストールされなくなってしまいました。。。

    ちょっと本筋とは外れた質問となるのですが、depを使ったパッケージ管理としてはどのような手順が正しいのでしょうか?
    開発途中でパッケージを追加したくなった場合
    - ソースコードに`import`文を書いて`dep ensure`を叩く
    - ソースコードに`import`文を書く前に`dep ensure -add`コマンドを叩く
    - 手動で`Gopkg.toml`ファイルを修正して`dep ensure`を叩く

    キャンセル

  • 2018/01/18 22:49

    あっていると思いますが、ensure 時に外部パッケージを更新する仕組みになっているので、github 上に既にないといけません。もし開発中なのであれば、一度 dep を使わずに開発して github に push してから dep の整備をされてはどうでしょうか。

    キャンセル

  • 2018/01/19 13:16

    なるほど、了解しました。
    開発中は`go get`でパッケージを取得するといった感じですかね。それでやってみます。

    ありがとうございました!

    キャンセル

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

ただいまの回答率

91.23%

関連した質問

同じタグがついた質問を見る

  • Go

    350questions

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