không thể tải xuống, $ GOPATH chưa được đặt


150

Tôi muốn cài đặt json2csv bằng cách sử dụng go get github.com/jehiah/json2csvnhưng tôi nhận được lỗi này:

package github.com/jehiah/json2csv: cannot download, $GOPATH not set. For more details see: go help go path

Bất kỳ trợ giúp về cách khắc phục điều này trên MacOS?




3
Tôi có cùng một vấn đề với một gói khác nhau (con). Các nhà bảo trì của C'mon Go, vui lòng tạo trình cài đặt (OS X) để hoàn thành công việc! Trình cài đặt OS X cho Node là một ví dụ tuyệt vời. Sử dụng Node không yêu cầu các bước cài đặt thủ công bổ sung. Nó chỉ hoạt động. Tôi hy vọng các phiên bản tương lai của trình cài đặt Go sẽ tốt hơn.
jwfearn

Câu trả lời:


140

[Cập nhật: kể từ Go 1.8, GOPATHmặc định $HOME/go, nhưng bạn vẫn có thể thấy điều này hữu ích nếu bạn muốn hiểu GOPATHbố cục, tùy chỉnh nó, v.v.]

Trang web chính thức của Go thảo luận về GOPATH và cách bố trí một thư mục không gian làm việc .

export GOPATH="$HOME/your-workspace-dir/"- chạy nó trong shell của bạn, sau đó thêm nó vào ~/.bashrchoặc tương đương để nó sẽ được đặt cho bạn trong tương lai. Go sẽ cài đặt các gói dưới src/, bin/pkg/, thư mục con ở đó. Bạn sẽ muốn đặt các gói của riêng mình ở đâu đó bên dưới $GOPATH/src, như $GOPATH/src/github.com/myusername/nếu bạn muốn xuất bản lên GitHub. Bạn cũng có thể muốn export PATH=$PATH:$GOPATH/bintrong .bashrcđể bạn có thể chạy các chương trình được biên dịch theo $GOPATH.

Tùy chọn, thông qua Rob Pike , bạn cũng có thể thiết lập CDPATHđể nhanh hơn cdđể đóng gói thư mục trong bash: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/xcó nghĩa là bạn chỉ có thể nhập cd net/htmlthay vì cd $GOPATH/src/golang.org/x/net/html.

Keith Rarick lưu ý bạn có thể thiết lập GOPATH=$HOMEđể đưa Go src/, pkg/bin/thư mục ngay dưới homedir của bạn. Điều đó có thể tốt (ví dụ, bạn có thể đã có $HOME/bintrong đường dẫn của mình) nhưng tất nhiên một số người sử dụng nhiều không gian làm việc, v.v.


Cảm ơn bạn về thông tin. Bạn có cần thay đổi không gian làm việc của mình cho từng dự án riêng lẻ không?
Doug Molineux

1
Nói chung, không, bạn có thể sử dụng một không gian làm việc có src/chứa eg github.com/youruser/xgithub.com/youruser/y. Đó là những gì tôi làm. Mọi người có thể có lý do để làm khác (chính sách của công ty để ngăn cách các dự án?), Nhưng tôi không thể nói điều đó.
twotwotwo 7/11/2015

3
$ GOPATH được đặt, nhưng "không thể tải xuống, $ GOPATH chưa được đặt. Để biết thêm chi tiết, hãy xem: go help gopath" vẫn xuất hiện.
Tyguy7

Nền tảng nào (Windows hoặc Linux / OS X / Unix khác)? Nếu không phải Windows, thì echo $GOPATHnói gì? Nó có thể có giá trị đăng như một câu hỏi riêng biệt; có vẻ như bạn đang ở trong một tình huống bất thường và việc gỡ lỗi những người trong các bình luận có thể rất khó khăn.
twotwotwo

2
@ Tyguy7 rất có thể là bạn đã không làm exportđiều đó; chạy /bin/bash -c "echo \$GOPATH"để xác minh rằng các quy trình phụ có thể nhìn thấy $GOPATH; nếu tiếng vang trống rỗng, sau đó chạy export GOPATHvà sau đógo get ...
sanmai


33

Sử dụng bia

Tôi đã cài đặt nó bằng cách sử dụng brew.

$ brew install go

Khi hoàn thành nếu bạn chạy lệnh brew này, nó sẽ hiển thị thông tin sau:

$ brew info go
go: stable 1.4.2 (bottled), HEAD
Go programming environment
https://golang.org
/usr/local/Cellar/go/1.4.2 (4676 files, 158M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/go.rb
==> Options
--with-cc-all
    Build with cross-compilers and runtime support for all supported platforms
--with-cc-common
    Build with cross-compilers and runtime support for darwin, linux and windows
--without-cgo
    Build without cgo
--without-godoc
    godoc will not be installed for you
--without-vet
    vet will not be installed for you
--HEAD
    Install HEAD version
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
  https://golang.org/doc/code.html#GOPATH

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/usr/local/opt/go/libexec/bin

Những phần quan trọng có những dòng này:

/usr/local/Cellar/go/1.4.2 (4676 tệp, 158M) *

xuất PATH = $ PATH: / usr / local / opt / go / libexec / bin

Thiết lập môi trường của GO

Điều đó cho thấy nơi GO đã được cài đặt. Chúng ta cần làm như sau để thiết lập môi trường của GO:

$ export PATH=$PATH:/usr/local/opt/go/libexec/bin
$ export GOPATH=/usr/local/opt/go/bin

Sau đó, bạn có thể kiểm tra bằng GO để xem nó có được cấu hình đúng không:

$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/usr/local/opt/go/bin"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.4.2/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.4.2/libexec/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

Thiết lập json2csv

Có vẻ tốt, vì vậy hãy cài đặt json2csv:

$ go get github.com/jehiah/json2csv
$

Chuyện gì vừa xảy ra vậy? Nó đã cài đặt nó. Bạn có thể kiểm tra như thế này:

$ $ ls -l $GOPATH/bin
total 5248
-rwxr-xr-x  1 sammingolelli  staff  2686320 Jun  9 12:28 json2csv

OK, vậy tại sao tôi không thể gõ json2csvvào vỏ của mình? Đó là bởi vì /binthư mục bên dưới $GOPATHkhông phải trên của bạn $PATH.

$ type -f json2csv
-bash: type: json2csv: not found

Vì vậy, hãy tạm thời thêm nó:

$ export PATH=$GOPATH/bin:$PATH

Và kiểm tra lại:

$ type -f json2csv
json2csv is hashed (/usr/local/opt/go/bin/bin/json2csv)

Bây giờ nó ở đó:

$ json2csv --help
Usage of json2csv:
  -d=",": delimiter used for output values
  -i="": /path/to/input.json (optional; default is stdin)
  -k=[]: fields to output
  -o="": /path/to/output.json (optional; default is stdout)
  -p=false: prints header to output
  -v=false: verbose output (to stderr)
  -version=false: print version string

Thêm các sửa đổi chúng tôi đã thực hiện $PATH$GOPATHcho bạn $HOME/.bash_profileđể làm cho chúng tồn tại giữa các lần khởi động lại.


18

Xem video

Nói chung, tôi luôn đề xuất video chính thức này từ Go để có cái nhìn tổng quan nhanh về vấn đề này:

http://www.youtube.com/watch?v=XCsL89YtqCs

Nó dễ dàng được hiển thị hơn là được nói.

@jwfearn diễn giải phần quan trọng của video:

export GOPATH="${HOME}/gocode"; export PATH="${PATH}:${GOPATH}/bin"; mkdir -p "${GOPATH}"


2
Video giới thiệu tuyệt vời - Tôi luôn hiểu rõ hơn khi nó được hiển thị cho tôi.
Joshua Pinter

3
Cảm ơn @jwfearn - video dành cho âm nhạc và giải trí khác; không thể sao chép và dán từ chúng :-)
kguest

5

Tôi thấy dễ dàng hơn để làm điều đó như thế này:

export GOROOT=$HOME/go
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH

3

Đối với MAC, điều này làm việc tốt cho tôi.

sudo nano /etc/bashrc

và thêm vào bên dưới ở cuối tập tin

export PATH=$PATH:/usr/local/opt/go/libexec/bin
export GOPATH=/usr/local/opt/go/bin

Điều này sẽ khắc phục vấn đề. Hãy thử mở một thiết bị đầu cuối mới và lặp lại $ GOPATH, bạn sẽ thấy giá trị chính xác.


2

(cho MAC)

Tôi đã thử tất cả các câu trả lời này và, vì một số lý do vẫn chưa biết, không ai trong số họ làm việc.

Tôi đã phải "ép ăn" GOPATH bằng cách đặt biến môi trường cho mỗi lệnh yêu cầu. Ví dụ:

sudo env GOPATH=$HOME/goWorkDirectory go build ...

Thậm chí glideđã cho tôi GOPATH not setlỗi. Đã giải quyết nó, một lần nữa, bằng cách "ép ăn": Tôi đã thử tất cả các câu trả lời này và, vì một số lý do vẫn chưa biết, không ai trong số họ làm việc.

Tôi đã phải "ép ăn" GOPATH bằng cách đặt biến môi trường cho mỗi lệnh yêu cầu.

sudo env GOPATH=$HOME/goWorkDirectory glide install

Hy vọng điều này sẽ giúp được ai đó.


2

Bạn $GOROOTkhông nên được thiết lập. Bạn $GOPATHnên đặt thành $HOME/gobằng cách gõexport $GOPATH=$HOME/go

Vui lòng nhập export GOROOT=""để khắc phục vấn đề của bạn.


1

Cứ làm đi export GOPATH="/whatever/you/like/your/GOPATH/to/be".


4
Nếu tôi là một người không đi, tôi vẫn chưa biết "tôi muốn GOPATH của mình ở đâu". IMHO đó là một lực cản mà không có hành vi GOPATH mặc định có thể bị ghi đè bởi một biến môi trường.
jwfearn

0

Nếu bạn gặp phải vấn đề này sau khi đã $GOPATHthiết lập, có thể là do bạn đang chạy nó với lớp vỏ không được hỗ trợ. Tôi đã sử dụng fishvà nó không hoạt động, khởi chạy nó bashhoạt động tốt.


0

Bạn có thể sử dụng giải pháp "xuất khẩu" giống như những gì người khác đã đề xuất. Tôi muốn cung cấp cho bạn một giải pháp khác để thuận tiện vĩnh viễn: bạn có thể sử dụng bất kỳ đường dẫn nào dưới dạng GOPATH khi chạy các lệnh Go.

Trước tiên, bạn cần tải xuống một công cụ nhỏ có tên gost: https://github.com/byte16/gost/release . Nếu bạn sử dụng Ubuntu, bạn có thể tải xuống phiên bản linux ( https://github.com/byte16/gost/release/doad/v0.1.0/gost_linux_amd64.tar.gz ).

Sau đó, bạn cần chạy các lệnh bên dưới để giải nén nó:

$ cd /path/to/your/download/directory 
$ tar -xvf gost_linux_amd64.tar.gz

Bạn sẽ có được một thực thi gost. Bạn có thể di chuyển nó để /usr/local/binsử dụng thuận tiện:

$ sudo mv gost /usr/local/bin

Chạy lệnh bên dưới để thêm đường dẫn bạn muốn sử dụng làm GOPATH vào không gian đường dẫn gost duy trì. Cần phải đặt tên đường dẫn mà bạn sẽ sử dụng sau này.

$ gost add foo /home/foobar/bar     # 'foo' is the name and '/home/foobar/bar' is the path

Chạy bất kỳ lệnh Go nào bạn muốn theo định dạng:

gost goCommand [-p {pathName}] -- [goFlags...] [goArgs...]

Ví dụ: bạn muốn chạy go get github.com/go-sql-driver/mysqlvới /home/foobar/bartư cách là GOPATH, chỉ cần thực hiện như sau:

$ gost get -p foo -- github.com/go-sql-driver/mysql  # 'foo' is the name you give to the path above.

Nó sẽ giúp bạn thiết lập GOPATH và chạy lệnh. Nhưng hãy nhớ rằng bạn đã thêm các đường dẫn vào gost's pathspace . Nếu bạn ở dưới bất kỳ cấp độ thư mục con nào /home/foobar/bar, bạn thậm chí có thể chạy lệnh bên dưới để thực hiện điều tương tự:

$ gost get -- github.com/go-sql-driver/mysql

gostlà một Công cụ đơn giản của Go có thể giúp bạn quản lý GOPATH và chạy các lệnh Go. Để biết thêm chi tiết về cách sử dụng nó để chạy các lệnh Go khác, bạn chỉ cần chạy gost help goCmdName. Ví dụ bạn muốn biết thêm về install, chỉ cần gõ các từ bên dưới vào:

$ gost help install

Bạn cũng có thể tìm thêm chi tiết trong README của dự án: https://github.com/byte16/gost/blob/master/README.md


0

Chạy 'go env' và xem vị trí GOPATH của bạn hiện đang hướng tới. Nếu bạn thay đổi thư mục đó, lệnh 'go get..etc' của bạn sẽ hoạt động.


0

Vấn đề này xảy ra với tôi trong mâm xôi pi. Tôi đã đăng nhập thông qua ứng dụng khách VNC Vấn đề vẫn tồn tại mặc dù đã cài đặt và xuất GOPATH. Sau đó, Ran lệnh "go get" không có sudo và nó hoạt động hoàn hảo.


-1

Tôi đã phải chạy một ứng dụng với quyền root (để mở máy chủ web trên cổng 80), điều này tạo ra lỗi cho tôi, vì người dùng sudo có môi trường khác với người dùng bình thường, do đó GOPATH không được đặt.

Nếu ai đó đang gặp vấn đề này, hãy thêm -Evào lệnh, điều này sẽ bảo vệ môi trường người dùng.

sudo -E go run main.go

Để biết thêm thông tin, hãy xem thảo luận tại đây: Google Groups - Vấn đề GOPATH


Không chắc chắn tại sao điều này bị hạ cấp, nhưng đã sửa nó cho tôi
Rơi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.