問題タブ [gopath]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
go - golang プロジェクトの下に vendor ディレクトリが見つかりません
私の golang のバージョンは go1.10.2 linux/amd64 です。go プロジェクト (gopath/src の下) を問題なくビルドして実行できますが、プロジェクト フォルダーの下に vendor ディレクトリが表示されません。vendor フォルダが隠しディレクトリかどうかを知りたいのですが? ベンダー フォルダが生成されない理由として考えられるものは何ですか?
go - golang ランタイム パッケージは、それがビルドされたシステムからファイルパスを設定します
次のようにランタイムパッケージを使用する単純な go コードがあります。
Ubuntu マシン (マシン Aなど)のカスタムの場所 (/home/ userA /bin/go) にGo バイナリをインストールしました。
マシンAでコンパイルし、同じマシンで実行可能ファイルを実行して出力を取得しました。
ここで、コンパイル済みの実行可能ファイルを別の Ubuntu マシン (マシン Bなど) にコピーし、そこで Go バイナリを別のカスタムの場所 (/home/ userB /bin/go) にインストールしました。/home/userBから実行可能ファイルを実行しました。しかし、今回も以前と同じ出力が得られました。
コンパイル時にランタイムパッケージがスタック フレームを設定しているようです。
マシンAでは/home/userAとして、マシンBでは /home/ userBとして設定したGOPATH環境変数に基づいて、ファイル パスに対して何らかの処理を行う必要があります。
これらの各ファイル パスから GOPATH 部分を削除する必要があります。私はこの単純な関数呼び出しでそれをやっています:strings.Replace(frame.File, GOPATH, "", 1)
ただし、ランタイム パッケージのこの動作のため、関数はマシンBstrings.Replace
のファイル パスの最初の部分を置き換えることができません。
マシンBでこれを達成する方法についてのアイデアはありますか?
アップデート
@JimB からの提案に従って、プロジェクトをビルドしました
CGO_ENABLED=0 go build -a -ldflags="-w -s" -gcflags=-trimpath=/home/userA -asmflags=-trimpath=/home/userA
ここで、同じマシンで実行可能ファイルを実行すると、次のような出力が得られます。
パス プレフィックスは、メイン ファイルに対してのみトリミングされます。ベンダーがインポートしたパッケージまたはローカルにインポートしたパッケージにはまだあります。
installation - Hyperledger Fabric の GOPATH
Hyperledger Fabric のドキュメントを参照しています。
https://hyperledger-fabric.readthedocs.io/en/release-1.2/prereqs.html
そして、「はじめに」のセクションで、前提条件から始めていることに気付きました。基本的に、ファブリックを使用するためのすべての依存関係をインストールします。
ただし、Fabric は前提条件セクションにインストールされていませんが、同じセクションの Go プログラミング言語の部分では、次のように言及されています。
まず、ダウンロードした Fabric コード ベースを含む Go ワークスペースを指すように環境変数 GOPATH を次のように設定する必要があります。
しかし、その時点ではダウンロードされた Fabric コード ベースはありません。
私はどうしたらいいですか?GOPATH の値は何ですか?
go - GOPATH 外のモノリシック リポジトリ アーキテクチャを使用して、Go 1.11+ で Golang のローカル モジュールを共有する方法
コンテキスト: モノリシック リポジトリ アーキテクチャを使用しています。これは、多くのプロジェクトを含む 1 つの大きな github リポジトリがあり、各プロジェクトが ui、node、go などに独自の技術スタックを使用していることを意味します。
go_common には、ロギング、データベース接続、構造体としてのスキーマ/モデルなど、すべての go プロジェクトで使用される共通コードがあります。Go 1.11 を使用し、go.mod でモジュールを宣言しています。また、このワークスペース全体と、GOPATH の外部にあるプロジェクトもあります。node.js プロジェクトで node_modules を .gitignore する方法と同様に、リポジトリ内にベンダー/サード パーティがダウンロードしたモジュールは必要ありません。そのため、go-get はベンダー モジュールを期待どおり GOPATH src/pkg にダウンロードし、任意の go プロジェクトにインポートするためにアクセスできます。
ただし、go_common のモジュールを参照する imports を動作させることはできません。go_common で go build と go install を実行して、GOPATH/bin にバイナリを作成しようとしましたが、実際に参照できるようにはなりませんでした。これを行う標準的な方法はありますか? 特に Go 1.11 と vgo の統合が GOPATH に依存せず、モジュール管理を容易にすることになっている今... ??
macos - Golang のダウンロードと「$GOPATH が設定されていません」
Golang 1.11.1 をダウンロードしましたが、ターミナルで「go version」と入力すると、「go version go1.6.2 darwin/amd64」と表示されます。
ターミナルで「which go」と入力すると、次のようになります: /usr/local/bin/go
/usr/local にgoディレクトリがあることがわかり、ファイル VERSION を開くと、1.11.1 と表示されます
ターミナルで「 go get https://github.com/blablabla 」を実行しようとすると、 「package github.com/google/uuid: cannot download, $GOPATH not set. 詳細については、 go help gopath' を参照してください。
ここでの問題は何ですか?私は自分の Mac の (元のユーザーではなく) ユーザーの 1 人である可能性がありますか? 自分のファイルにアクセスするには、最初に Users/myusername に移動する必要があります... これが機能するように GOPATH を変更するにはどうすればよいですか?
ありがとうございます
更新: bash_profile を編集して $GOPATH を "/Users/myusername/go" に設定しましたが、Go を再ダウンロードしてもバージョンは変更されていません。