私はgo1.11rc1を試してみましたが、最初に気づいたのは、golandがインポートを認識しないことです。
golandバージョンアナウンスメント は次のように述べています:「そのまま使用できるGoモジュール(以前のvgo)のサポート」
誰でもこれを修正する方法を知っていますか?
問題:
再現する手順:
mkdir pjg && cd pjg
go.mod
ファイルを作成します:go mod init github.com/stevetarver/pjg
go get github.com/urfave/cli
go.mod
ファイルは次のようになります。
module github.com/stevetarver/pjg/v1
require github.com/urfave/cli v1.20.0 // indirect
main.go
を作成:
package main
import (
"fmt"
"log"
"os"
"github.com/urfave/cli"
)
func main() {
app := cli.NewApp()
app.Name = "boom"
app.Usage = "make an explosive entrance"
app.Action = func(c *cli.Context) error {
fmt.Println("boom! I say!")
return nil
}
err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
}
Golandでmain.go
を表示し、赤いテキストにカーソルを合わせて問題を確認します。
$GOPATH/pkg/mod/
に保存されますノート:
$GOPATH
は正しく設定されています-go get
はパッケージを正しい場所に配置し、envのGOPATHはgolandの設定に一致します。/Users/starver/code/go/pkg/mod
はこれを修正しませんでした。GoLandの最新バージョンはvgoおよびgoモジュールのサポートを実装しましたが、go1.11rc1構文の変更に追いついていません。それが暫定的に誰かを助ける場合に備えて、私が試したものと彼らの問題と成功を文書化します。
TL; DR:プロジェクトを$GOPATH
に入れずに、新しいプロジェクトを「Go Module(vgo)」タイプとして作成します。OR turn既存のプロジェクトではその設定が有効です。
Go1.11rc1をグローバルgo
としてインストールすると、GoLandのgo mod
プロジェクトには3つの基本的な使用例があります...
$GOPATH
:$GOPATH
内の何かに設定します:$GOPATH/src/github.com/stevetarver/insidegopath
main.go
に存在しないパッケージを参照する$GOPATH
ファイルを作成します。Gifで説明されているvgo
を介したgo get
GoLandの使用 here :
go: go mod -sync is now go mod tidy
go get
を使用して、GoLand組み込みのターミナル方法:
go get
インポート。ᐅ go get github.com/urfave/cli go get: warning: modules disabled by GO111MODULE=auto in GOPATH/src; ignoring go.mod; see 'go help modules'
その変数をオンにして、再試行してみましょう。
GO111MODULE=on
を設定:[設定]-> [外観と動作]-> [パス変数]を開き、GO111MODULE=on
を追加します。env | grep GO111MODULE
は何も生成しません。シェルの初期化スクリプトでGO111MODULE=on
を設定できますが、それはまだgoモジュールを使用していないすべてのプロジェクトを破壊します。
各goコマンドの前にenv var:export GO111MODULE=on; go get github.com/urfave/cli
を付けるか、これを行うプロジェクトディレクトリにgo
Shellスクリプトラッパーを作成することもできます。
これらのどれも実際に実行可能なソリューションではありませんが、ポイントオブゴーモジュールの一部は恐ろしいゴーワークスペースからの脱出ですので、読んでください、それは良くなります
$GOPATH
:$GOPATH
以外の場所に設定しますgo.mod
を修正します。生成されたファイルにはmodule "outsidegopath"
が含まれますが、module github.com/stevetarver/outsidegopath
のようなものが必要です。これは少し不安定です-GoLandはgo.mod
を書き換え、パスの一部を削除しようとします。数回繰り返すと、試行が停止します。main.go
ファイルを作成します。 ideを介してgoファイルとして作成する場合、package outsidegopath
が含まれます。 package main
になるように修正します。go get github.com/urfave/cli
ができ、期待どおり$GOPATH/pkg/mod
にフェッチされます。go mod
サポートを既存の新しいプロジェクトに追加します。これは本当に簡単であることが判明しました-GoLandでgoモジュールを操作する最良の方法:
go.mod
を使用して独自のgo mod init module-name
を作成します。モジュール管理 Go 1.13(2019年8月)の方が簡単です:
GO111MODULE
環境変数は引き続きデフォルトでauto
に設定されますが、現在の作業ディレクトリにgo.mod
ファイルが含まれているか、その下にある場合は、auto
設定がgo
コマンドのモジュール対応モードをアクティブにします— 現在のディレクトリがGOPATH/src
内にある場合でも。この変更により、
GOPATH/src
内の既存のコードの移行と、モジュールを認識しないインポーターとともにモジュールを認識できるパッケージの継続的なメンテナンスが簡単になります。
つまり、「プロジェクトを$GOPATH
に入れないでください」という部分はすべて不要になります。go.mod
ファイルがある限り、コマンドラインからモジュールが認識されます またはIDE から。