2017-04-24 14 views
12

Tôi đang gặp sự cố khi thiết lập công cụ Go App trên osX. Đường dẫn google-cloud-sdk có ở GOROOT hoặc GOPATH không?GO tìm kiếm ở đâu trên google-cloud-sdk? GOPATH nên là gì?

tôi đặt google-cloud-sdk trong/usr/local

Dường như có mã nguồn trong: goroot/

/usr/local/google-cloud-sdk/platform/google_appengine/goroot/ 

đi env

GOPATH="/usr/local/google-cloud-sdk/platform/google_appengine/goroot" 
GORACE="" 
GOROOT="/usr/local/go" 
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" 

$ đi nhận được

package google.golang.org/appengine: cannot download, /usr/local/google-cloud-sdk/platform/google_appengine/goroot is a GOROOT, not a GOPATH. For more details see: 'go help gopath' 
package google.golang.org/appengine/datastore: cannot download, /usr/local/google-cloud-sdk/platform/google_appengine/goroot is a GOROOT, not a GOPATH. For more details see: 'go help gopath' 

Khi tôi cố gắng để thay đổi PATH để bao gồm/src:

GOPATH="/usr/local/google-cloud-sdk/platform/google_appengine/goroot/src" 

$ đi lấy

package google.golang.org/appengine: mkdir /usr/local/google-cloud-sdk/platform/google_appengine/goroot/src/src: permission denied 
package google.golang.org/appengine/datastore: cannot find package "google.golang.org/appengine/datastore" in any of: 
    /usr/local/go/src/google.golang.org/appengine/datastore (from $GOROOT) 
    /usr/local/google-cloud-sdk/platform/google_appengine/goroot/src/src/google.golang.org/appengine/datastore (from $GOPATH) 

tôi nối đường dẫn đến google-cloud-sdk để GOROOT:

export GOROOT="/usr/local/go/:/usr/local/google-cloud-sdk/platform/google_appengine/goroot" 

GO doesn' t dường như thích nhiều đường dẫn trong GOROOT:
$ go get

go: cannot find GOROOT directory: /usr/local/go/:/usr/local/google-cloud-sdk/platform/google_appengine/goroot 

Tôi đã chạy tập lệnh ./install.sh sau khi tôi sao chép nguồn vào/usr/local

Phần bổ sung của PATH không sửa lỗi tôi đang gặp phải.

Tôi thấy câu trả lời này: Test cases for go and appengine

Nhưng đó là từ 5 năm trước và nó có vẻ vụng về/hacky. Nó sẽ có vẻ trong 5 năm sẽ có một giải pháp thanh lịch hơn mà sao chép các thư mục cá nhân và tạo ra các liên kết tượng trưng.

EDIT **********************
mv /usr/local/google-cloud-sdk/ ~/go/ sau đó xóa GOPATH và GOROOT từ .bash_profile

Sau đó tôi chạy ./install.sh

tôi đã cố gắng để chạy 'đi lấy':

$ đi lấy

go install: no install location for directory /Users/Bryan/work/gocode/skincarereview outside GOPATH 

Kể từ đó thất bại, tôi đã thêm đường dẫn đến thư mục làm việc của mã VÀ nối đường dẫn đến google-cloud-sdk vào PATH:

export GOPATH = "/Users/Bryan/work/gocode/skincarereview" 
export PATH=$HOME/google-cloud-sdk:$PATH 

go get nhận thất bại với cùng một thông điệp:

$ go get 

go install: no install location for directory /Users/Bryan/work/gocode/skincarereview outside GOPATH 
    For more details see: 'go help gopath' 

Trả lời

7

Nó đi trong không $ GOROOT hoặc $ GOPATH. Chỉ cần giải nén nó vào thư mục $ HOME của bạn và chạy trình cài đặt. Nếu cần, hãy thêm nó vào $ PATH của bạn bằng cách thêm dòng này vào số .bash_profile của bạn.

export PATH=$HOME/google-cloud-sdk:$PATH 

Hãy chắc chắn rằng bạn lấy SDK golang cũng với gcloud components install app-engine-gohttps://cloud.google.com/appengine/docs/standard/go/download

KHÔNG thay đổi con đường của bạn để bao gồm các thư mục src trong google-cloud-sdk/platform/google_appengine/goroot/src. Điều đó sẽ phá vỡ mọi thứ. Bạn để $ GOPATH của bạn trở thành cài đặt bình thường. Sử dụng SDK App Engine cho Go sẽ tự động sử dụng các nguồn trong thư mục đó mà không có bất kỳ thao tác nào.

Ngoài ra, bạn KHÔNG BAO GIỜ THỰC HIỆN thay đổi $ GOROOT trừ khi bạn định biên dịch phiên bản Go mới từ nguồn (như trong phiên bản mới của ngôn ngữ). Nó sẽ tự động thiết lập $ GOROOT phù hợp cho bạn. https://dave.cheney.net/2013/06/14/you-dont-need-to-set-goroot-really

Nếu quá trình cài đặt của bạn không đúng lý do (đã xảy ra với tôi một lần), chỉ cần xóa SDK đám mây và mọi tham chiếu đến nó trong $ PATH của bạn. Cũng hoàn toàn gỡ bỏ cài đặt Go thường xuyên. Sau đó bắt đầu từ đầu. Cài đặt Go, giải nén google-cloud-sdk, chạy trình cài đặt (thêm vào $ PATH nếu cần), gcloud components install app-engine-go. Thì đấy.

Khi phát triển cho App Engine, các nguồn đi của bạn đi vào REGOPAR $ GOPATH của bạn. Họ KHÔNG đi theo số google-cloud-sdk/... ở bất kỳ đâu. Để chạy dev_appserver cục bộ, hãy chạy dev_appserver.py [path-to-source] trong đó đường dẫn đã cho chứa mã của bạn và app.yaml. Tôi thường cd vào đường dẫn dự án của tôi (ví dụ: cd $HOME/go/src/myproject) và chạy với dev_appserver.py ./. https://cloud.google.com/appengine/docs/standard/go/tools/using-local-server

Triển khai được đề cập ở đây. https://cloud.google.com/appengine/docs/standard/go/tools/uploadinganapp

EDIT: Cấu trúc thư mục.

$ GOPATH = $ HOME/đi

enter image description here

Vị trí nào cho thư mục google-cloud-sdk

enter image description here

+0

Tôi đã cố gắng để làm những gì bạn đề nghị và nó đã không làm việc. Tôi đã thêm nỗ lực của mình vào OP. – BryanWheelock

+1

@BryanWheelock Bạn vừa chuyển SDK vào thư mục nguồn của bạn. Nó đi vào thư mục nhà của bạn lên một cấp. Nó phải nằm trong '~/google-cloud-sdk' Đặt' $ GOPATH' của bạn thành '$ HOME/go' trừ khi các nguồn của bạn nằm trong thư mục' work/gocode' mà bạn đã đề cập, sau đó sử dụng nó, mặc dù tôi ' m khá chắc chắn bạn muốn '$ HOME/go'. Ngoài ra, dự án của bạn phải được đặt trong thư mục $ GOPATH/src' của bạn. – RayfenWindspear

+1

@BryanWheelock cập nhật câu trả lời – RayfenWindspear

Các vấn đề liên quan