2012-09-20 4 views
14

これはやや私の最後の質問へのフォローアップです:golang: installing packages in a local directorygolang:試行をインストール行きは/ usr/localではなくGOPATH

私はGOPATHセット$HOME/prog/go/gopathに持っており、このパスは3つのディレクトリに存在します:

~/prog/go/gopath$ ls 
bin pkg src 

今私は、ソースディレクトリ内

go install 

を実行するために私に尋ねmodule to access the redis databaseをインストールしよう。しかし、コマンドgo installは私に与え

~/prog/go/gopath/src/redis (go1)$ go install 
go install flag: open /usr/local/go/pkg/darwin_amd64/flag.a: permission denied 
~/prog/go/gopath/src/redis (go1)$ echo $GOPATH 
<myhomedir>/prog/go/gopath 

(どこ<myhomedir>で有効なパス)

質問1:なぜgo install考慮に$GOPATHを取ることはありませんか? 質問2:$GOPATHを使用するようにgo installを納得させるには?

答えて

6

セットアップ方法はわかりませんが、stdライブラリからパッケージをビルドする必要がある可能性がありますが、アクセス許可が原因でできない可能性があります。試してみることができます

これは、標準ライブラリを構築し、すべてが正常であることを確認するためのテストを実行する必要があります。

必要に応じて$ GOROOTから読み取り、実行するための適切な権限を持っていることを確認してください。個人的に私はgolang.orgからアーカイブをダウンロードして〜/ local/goに保存し、GOROOTを適切に設定します。

+0

私はそれが何をしているのか分かりません。これまでのインストールはうまくいきます。決して問題はなく、クロスコンパイルもうまく動作します。 – topskip

+0

あなたは/usr/local/go/pkg/darwin_amd64/flag.aを読む権限がありますか? – dskinner

+0

はい、私はメインユーザとして '/ usr/local/go/pkg/darwin_amd64/flag.a'を読むことができます – topskip

3

私はあなたが必要とするコマンドは「取りに行く」だと思う:

go get github.com/alphazero/Go-Redis 

はゴーRedisのライブラリをダウンロードして、$ GOPATH/srcディレクトリに入れます。

go installは、独自のソースコードでコンパイルとインストールを実行します。

私はこのコンセプト全体を少しは苦労しましたが、 "How to Write Go"とコード編成セクションを注意深く読んでみると、goコマンドの仕組みについて知っておくべきことが書かれています。

+0

これは私に同じエラーを返します... – topskip

+0

... btw: 'go get'は私が試したものから' https:// 'なしでなければなりません。 「書き方」へのリンクありがとう! – topskip

+0

GOPATHはパスのリストではありません(PATHに似ています)?それは私が正しく思い出すなら、ドキュメンテーションが言うことです。あなたはGOROOTを意味していないと確信していますか? – weberc2

0

解決策は、.bash_profileからGOROOTを削除することです。次に、goコマンドはGOPATHディレクトリにそれをインストールします。 これは奇妙なことです。私は.bash_profileにGOROOTを再設定して新しいシェルを作成すると、それも機能します。

5

同様の問題があります。 $ GOROOTを調べると、そこにはすべてのライブラリが既にビルドされていることがわかります。しかし何らかの理由で、すべてのライブラリを再構築しようとします。だから私はちょっとしたトリックをします:

find /usr/lib/go/pkg/ -name "*.*" | sudo xargs touch 

すべてうまくいきます。

+0

$ GOROOT/srcと$ GOROOT/pkgのファイルのタイムスタンプの違いにより、pkgファイルの期限が切れていると判断され、試行しています再建される。しかし、ユーザーが書き込み権限を持っていないため、権限拒否エラーがあります。各.aファイルに触れて問題を解決します。 –

+1

私が走ったコマンドは、 'find/usr/local/go -name" * .a "-exec touch -r \'と少し違っていました。\ '{} \;' –

関連する問題