teratail header banner
teratail header banner
質問するログイン新規登録

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

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

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

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

Q&A

2回答

6093閲覧

GoPathをプロジェクト毎にさくっと変更したい

tuioku

総合スコア42

Go

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

0グッド

1クリップ

投稿2019/05/15 02:40

編集2019/05/15 02:49

0

1

GoPathの変更がちょっと面倒だと感じています。

私はいつも、別のプロジェクトの開発を進めたいなって思った時は、.bash_profileのGopathをわざわざ変更しております。
go getもgopathが正しく設定されていないと、ちゃんとしたところに入ってこないし、
また、正しいGopathに設定しないと、Intellijもソースコード上で赤く光ってしまうため、ちょっと困っております。

まだ、Go言語初心者ですので、自分は、僕はこうしているという方がいればご教授頂きたいです。

ちなみにインストールしているgo管理ツールはgoenvを使用しております。

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

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

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

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

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

guest

回答2

0

goに限った話ではないですが、環境変数をプロジェクトディレクトリに入ったら追加したいとか変えたいとかであれば
direnvが便利です。

https://github.com/direnv/direnv

上の方が仰っているように『プロジェクトごとに依存環境を管理したい』とかであればgo moduleでできます
(go version 1.11以降)

投稿2019/05/29 09:54

teikoku-penguin

総合スコア314

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

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

nobonobo

2019/05/30 04:35

エディタによってはdirenvによる変更に追従してくれるプラグインがあったりしますので こちらの手法も良いと思います!
guest

0

GOPATHは一か所に固定しておいて、
プロジェクトごとにパッケージ管理を分離するなら
Go1.11以降のGO MODULE機能を使うとよいですよ!

GOPATH配下じゃないところに以下のようなプロジェクトフォルダ構成を作って、
(またはGO111MODULES=on環境変数を設定)

sample1/ ┗┳━sub/ ┃ ┗━impl.go ┗━main.go

impl.go

go

1package sub 2 3var Name = "sub"

main.go

go

1package main 2 3import "example.org/sample1/sub" 4 5func main() { 6 println(sub.Name) 7}

sample1フォルダ直下で以下のコマンドでGo-Moduleを初期化すれば、
カレントフォルダは「example.org/sample1」パッケージルートと等価になります。

shell

1go mod init example.org/sample1 2# あとはrunしたりbuildしたりご自由に。 3go run . 4go build .

また、go mod vender とすると現在使っているリビジョンをGOPATH配下からカレントフォルダ/vendor配下にコピーしてくれます。

Intellijのパッケージ探索がGo-Moduleに対応しているかどうかについては私は使っていないのでわかりませんが、Goの静的解析ツール群やコード補完支援サーバーなども順次Go-Module対応が進んでいくはずです。

投稿2019/05/15 03:29

編集2019/05/15 10:14
nobonobo

総合スコア3367

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

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

tuioku

2019/05/15 10:14

ありがとうございます。 moduleを作成するということですが、directory単位でできる方法はないのでしょうか?? 例えば、下記みたいなやり方が理想なのですが。。。 https://qiita.com/nghinv/items/37ab7aed484e007b0493 ↓ gvm pkgset use hogeとかgvm pkgset use fugaで一瞬でgopathを切り替える
nobonobo

2019/05/15 10:29

何のためにパッケージ群を切り替えたいのでしょうか? プロジェクトごとにパッケージ依存の整合性を担保したいというのであればGo-Moduleで十分確保できますし、GoLandなどはGo-Moduleをサポートしたと書いてますね。 そしてGo1.13ではGo-Moduleが常に有効になりスタンダードな方法になります。 (なのでたとえ別の不具合があっても修正されていくことが期待できます。) おそらくgvmを使う方法だと都度エディタに新しい環境変数セットをプロジェクト用設定に載せる必要があるでしょう。
tuioku

2019/06/03 03:54

Go言語でプロジェクトを複数、進めていく場合のフォルダ構造ってどんな風になっているのでしょうか?? 例えば、go moduleを使う場合は下記のような場合を想定して、切り替えられるのでしょうか?? goPath/project1 goPath/project2
nobonobo

2019/06/03 09:59

「プロジェクトを複数」というのが具体的にどういう状況を指しているのかはわかりませんが、言えることは以下に列挙します。 - GOPATH切り替えにこだわっているようですが僕の回答は切り替えないほうが良い結果になるだろうという提案です(IDEが一つのGOPATHを見るだけになるのでコード補完等は常に効くしgo-module対応のIDEならなおさら)。 - どうしてもGOPATH切り替えを想定するのであれば、direnvのほうが有効でしょう(direnvに追従するIDEが必要、例えばVSCode)。 - GOPATHの配下にプロジェクトがあるかどうかはもうMUSTではなくなりました(go-moduleのおかげ)。 - go-moduleで依存解決する場合module毎に依存関係はちゃんと独立して解決されるのでmodule毎に別のGOPATHを用意する必要はありません。 - `go mod init main`などとしてこのモジュールを再利用しないモジュール≒プロジェクトとすることもできる - 1プロジェクト毎に「リポジトリルート」=「go mod initしたフォルダ」を割り当てるのが基本。 以上です。
nobonobo

2019/06/03 23:52 編集

ちなみに僕の手元では 以下のような構成をGOPATHを固定したまま運用できています。 projects/ - project1/  - go.mod // go mod init project1  - main.go - project2/  - go.mod // go mod init project2  - main.go
tuioku

2019/06/04 03:21

ありがとうございます。試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問