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

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

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

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

1回答

1600閲覧

Goのプロジェクト構成について

xxyyxx

総合スコア40

Go

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2018/01/30 10:20

Go初心者です。
昨日に続き、プロジェクト構成についてよく理解できないところや、
パッケージ管理ツールについてお聞きしたいことがあります。

(※[昨日の質問] -> https://teratail.com/questions/111076)

昨日の質問からお話を続けさせていただきます。

dep+gvmでプロジェクト構成を考えていました。
プロジェクトを沢山量産したいので、gvmで言語のヴァージョンを簡単に切り替えて、
それぞれのプロジェクトのパッケージの依存をなくすために depを採用しました。

ただ、昨日の質問にある記事を進めていたところ、

├── Gopkg.lock ├── Gopkg.toml ├── Makefile ├── README.md ├── app │   ├── app.yaml │   └── main.go ├── gae │   └── hello.go └── vendor └── github.com ├── gorilla └── ryutah

/gae/hello.go、このファイルに変更を加えても反映されないことに気付きました。
この場合、昨日のコメントの履歴からGOPATHがよくないのかなと推測しているのですが、
GOPATHをプロジェクト毎に変更を加えるのも手間なのかと思いました。。

なにか良いプロジェクト構成ありましたら、是非ご教示願います。
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

前の質問の回答にも書きましたが、GOPATH の中で作業されていないのが原因かと思います。最近の Go コマンドであれば、GOPATH のデフォルト値は ~/go になっているはずですので

mkdir -p ~/go/src/github.com/[GitHub上のユーザ]/[プロジェクト名]

の様にフォルダを作り、その中にファイルを持っていって作業して下さい。

投稿2018/01/30 10:22

mattn

総合スコア5030

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

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

xxyyxx

2018/01/30 11:13

度々ご回答ありがとうございます! 自分の思い違いだったら申し訳ないのですが、 GOPATH=$HOME/go これを.bash_profileに記述済。 $HOME/go/src/github.com/<github名>/gotest/ にしているのですが、これで合っていないんでしょうか?!
mattn

2018/01/30 11:18

あっていると思います。ただ前の質問に /gae/hello.go と書かれておられたので実際の / を使っておられるのかと思ってしまいまいました。前の質問のログは、vendor 配下が取得出来ていない物だったので今一度ログを張り付けて貰えますか。
xxyyxx

2018/01/30 11:35

失礼しました、、 前回の質問で、"goapp get ./..."をプロジェクトディレクトリで実行したところ、エラーログ(前回の質問に記載してあるもの)は、なくなりまして正常にローカルサーバーは機能しました。なのでエラーログ自体はないのです、、 $HOME/go/src/github.com/<github名>/gotest/gae/hello.go こちらに"Hello world"と表示するコードがあるので、ひとまず変えてみようと"Hello world!!!"みたいにしたところ、変わらず。 そして原因が不明な状態なのです、、
mattn

2018/01/30 14:31

問題なさそうに見えますね。goapp はビルドしてからサーバを起動しているはずですので、ビルドが成功していないのであればサーバが起動していないはずです。サーバを停止してもブラウザからアクセス出来ていたりしないでしょうか。
xxyyxx

2018/01/30 15:01

先程も調査してたのですが、検討つかずでした。明日も色々と試してみたり確認してみたりします。 色々とアドバイスいただきましてありがとうございます!
xxyyxx

2018/01/30 15:04

サーバーを停止するとアクセスはできないようです。
mattn

2018/01/30 16:43 編集

app/main.go から gae/hello.go を import していると思うのですが、どの様に import されていますか?そこがもしかして vendor に入っていたりしませんか?
xxyyxx

2018/01/31 00:43 編集

import ( "net/http" "github.com/gorilla/mux" "github.com/ryutah/gae-structure-sample/gae" ) このようにimportしています。 これが良くないのでしょうか?、
mattn

2018/01/31 00:46

vendor の中に github.com/ryutah/gae-structure-sample/gae が入ってしまっているならば、一度消してみて下さい。
xxyyxx

2018/01/31 00:52

vendor/github.com/ryutah/gae-structure-sample/gaeをまず削除。結果、"Hello world"が表示される。 今度は、vendor/github.com/ryutah/ごと削除。結果、"Hello world"が表示される。 パッケージの参照先がおかしいのでしょうかね、、
mattn

2018/01/31 01:04

えと、今は正しく動いたという事でしょうか?おそらく何かの拍子(dep ensure?)に、本体ソースが vendor の中に入ってしまって、いくらビルドしても本体ソースが使われない構成になってしまっていたのだと思います。
xxyyxx

2018/01/31 01:04

再度dep initしても変わらず。なにか根本的な部分で詰まっているのかもしれないです...
xxyyxx

2018/01/31 01:06

あ、いえgae/hello.goをやはり編集しても("Hello world" -> "hello world!!!"みたいにしても)変わらずなのですよね、、
mattn

2018/01/31 01:24

手元で github から clone してビルドしてみていますが、正しく動いてますね。あと dep ensure では vendor に gae-structure-sample は入りませんでした。どこかに別のソースが紛れ込んでしてまっているか、ビルド済みのパッケージが $GOPATH/bin/github.com/ryutah 配下にインストールされてしまっている可能性があります。もしあれば一度削除してみて下さい。
xxyyxx

2018/01/31 02:18 編集

上記を確認してみましたが、大丈夫なようでした。 ですが、気になるのが、gvmを使用しているのですが、$GOPATHが/Users/<name>/.gvm/pkgsets/go1.9.2/global に書き換わっていることに気付きました。 そして前回の質問で書いたエラーログと同様なログが表示されました。 2018/01/31 11:11:27 Can't find package "github.com/gorilla/mux" in $GOPATH: cannot find package "github.com/gorilla/mux" in any of: /usr/local/Cellar/app-engine-go-64/1.9.61/share/app-engine-go-64/goroot-1.8/src/github.com/gorilla/mux (from $GOROOT) /Users/<name>/.gvm/pkgsets/go1.9.2/global/src/github.com/gorilla/mux (from $GOPATH) 2018/01/31 11:11:27 Can't find package "github.com/ryutah/gae-structure-sample/gae" in $GOPATH: cannot find package "github.com/ryutah/gae-structure-sample/gae" in any of: /usr/local/Cellar/app-engine-go-64/1.9.61/share/app-engine-go-64/goroot-1.8/src/github.com/ryutah/gae-structure-sample/gae (from $GOROOT) /Users/<name>/.gvm/pkgsets/go1.9.2/global/src/github.com/ryutah/gae-structure-sample/gae (from $GOPATH) ここが怪しい気がしてきました。
xxyyxx

2018/01/31 02:23

export GOPATH=$HOME/goを実行(.bash_profileにも書いてあるのに..)、そうするとパッケージがないよというエラーは消えるが、gae/hello.goを編集しても変更は反映されない。これはわかりました。
xxyyxx

2018/01/31 02:55 編集

gvmを使用した時に、GOPATHが変更されるのは、gvmの設定ファイルを作成&変更していなかったからでした。作成しGOPATH指定したらエラーは解消。ただし、dep コマンド実行すると怒られた...
xxyyxx

2018/01/31 03:41

情報ありがとうございます! depの方は大丈夫になりました!ありがとうございます! ただ、やはりgae/hello.goの編集は未だ反映されず。。gvmまわりまだ確認しないといけないような気がするので、調査。
xxyyxx

2018/01/31 04:28

やはりgvmでした。 gvmのpkgsetファイルの変更でちゃんとGOPATHを通してあげること。 その設定したファイルをプロジェクトルートで使用すること。 main.goからimport "github.com/<name>/gotest/gae"で参照し、Hello worldを変更したら反映されるようになりました。 色々とmattnさんにアドバイス頂いて、他にもgoの知識を埋めることができました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問