Làm cách nào để thiết lập biến môi trường GOPATH trên Ubuntu? Tôi phải chỉnh sửa tập tin nào?


258

Tôi đang cố gắng làm một go get:

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

và nó không thành công với lỗi sau:

package github.com/go-sql-driver/mysql: cannot download, $GOPATH not set. For more details see: go help gopath

Khi tôi thực hiện go env, một danh sách các giá trị Go được hiển thị như bên dưới:

ubuntu@ip-xxx-x-xx-x:~$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CGO_ENABLED="1"

rõ ràng GOPATH không được đặt, tôi phải đặt nó như thế nào và ở đâu?

Tôi thấy nhiều chủ đề đề cập đến lỗi này nhưng không có chủ đề nào trả lời cho câu hỏi của tôi, tập tin nào cần được chỉnh sửa để cung cấp giá trị cho đường dẫn này?


Bạn đang sử dụng vỏ gì?
fuz

3
Ngoài các câu trả lời về việc đặt nó là gì, hãy xem câu trả lời SO này , trong đó làm rõ GOPATH là gì và cách sử dụng chung
Louis Maddox



1
Lưu ý: Go 1.8+ (Q2 2017) sẽ được đặt GOPATHcho bạn: xem câu trả lời của tôi bên dưới .
VonC

Câu trả lời:


284

Cách mới:

Kiểm tra câu trả lời này.

Cách cũ:

Chỉ cần thêm các dòng sau vào ~ / .bashrc và điều này sẽ tồn tại. Tuy nhiên, bạn có thể sử dụng các đường dẫn khác mà bạn thích như GOPATH thay vì $ HOME / đi trong mẫu của tôi.

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

14
Đường dẫn là /usr/share/gotrên Ubuntu 13.10 của tôi.
tsusanka

35
KHÔNG sử dụng / usr / share / go. GOPATH là "không gian làm việc", nơi nó tải các gói, et cetera. Tạo một thư mục mới và sử dụng đó. Tôi khuyên bạn nên ~ / .go
Bryan Larsen

16
Như đã nêu trong câu trả lời của user2128535, GOROOT nên được đặt thành / usr / lib / go
trung bình


12
Ghi nhớ $ source ~/.bashrc;)
eversor

65

Ubuntu 14.04

export GOPATH=$HOME/go

Ngoài ra, bạn có thể thêm chuỗi này vào tập tin

$HOME/.bashrc

1
Nhận xét của bạn gây nhầm lẫn bởi vì nó đề cập đến một dòng hiện đã bị xóa của câu trả lời ban đầu.
Marcel Burkhard

mkdir -p ~ / go / bin export GOPATH = ~ / go xuất PATH = $ PATH: $ GOPATH / bin:
Alex Punnen

61

GOPATH nên được đặt thành một thư mục trống mới được tạo. Đây là "không gian làm việc", nơi nó tải các gói, et cetera. Tôi sử dụng ~ / .go.

Ví dụ:

mkdir ~/.go
echo "GOPATH=$HOME/.go" >> ~/.bashrc
echo "export GOPATH" >> ~/.bashrc
echo "PATH=\$PATH:\$GOPATH/bin # Add GOPATH/bin to PATH for scripting" >> ~/.bashrc
source ~/.bashrc

nguồn: http://www.larry-price.com/blog/2013/12/15/setting-up-a-go-en môi-in-Ubuntu-12-ot-04 /


1
Cảm ơn bạn rất nhiều
Dylan B

35

Cách mới: Đi mô-đun

Kể từ Go 1.11, bạn không phải sử dụng GOPATH nữa. Chỉ cần vào thư mục dự án của bạn và làm điều này một lần:

go mod init github.com/youruser/yourrepo
  • Với điều này, Go tạo ra một mô-đun gốc tại thư mục đó.
  • Bạn có thể tạo nhiều mô-đun như bạn muốn.
  • Để biết hướng dẫn từng bước, cũng xem câu trả lời này .

Cách cũ: GOPATH

Nếu bạn khăng khăng làm việc với GOPATH thì hãy chú ý điều này:

  • Kể từ Go 1.8, bạn không cần thiết lập GOPATH hoặc GOROOT.
  • GOPATH theo mặc định là trong thư mục người dùng / nhà của bạn.

Từ tài liệu :

Nếu không có GOPATH nào được đặt, nó được coi là $ HOME / đi trên các hệ thống Unix và% USERPROFILE% \ đi trên Windows. Nếu bạn muốn sử dụng một vị trí tùy chỉnh làm không gian làm việc của mình, bạn có thể đặt biến môi trường GOPATH.


34

Nếu ví dụ, đó là Ubuntu, sau khi cài đặt các gói:

$sudo apt install golang -y

Chỉ cần thêm các dòng sau vào ~ / .bashrc (Của người dùng của bạn)

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

19
export GOPATH=/path/desired/here

Không cần chỉnh sửa bất kỳ tệp nào, chúng ta chỉ cần sử dụng lệnh trên để chỉnh sửa trực tiếp các biến môi trường Go.


11
Điều này không phải là dai dẳng. Nếu bạn muốn tùy chọn này ở lại - bạn có thể làm - bạn sẽ phải thêm nó vào một số tệp đang được tải khi đăng nhập.
Khối

1
Cảm ơn! Điều mà hầu hết người dùng không bao giờ nghĩ là có những người bắt đầu với linux và nếu không có tài liệu nào nói những gì bạn nói (Bởi vì mọi người nghĩ đó là sự thật đã biết) chúng ta sẽ tìm hiểu / tìm thông tin như thế nào?
PlayHardGoPro

19

Viết mã này trong Terminal.

export GOPATH=path/to/your/gopath/directory

Lưu ý : Điều này sẽ thiết lập lại trên mỗi cửa sổ Terminal mới hoặc khởi động lại hệ thống.

Để được kiên trì, dán mã dưới đây trong .zshrchoặc .bashrctập tin của bạn theo vỏ của bạn. Những tập tin trong Thư mục nhà của bạn . Nó sẽ giống như dưới đây.

export PATH=path/to/some/other/place/composer/for/example
export GOPATH=path/to/your/gopath/directory
export PATH=$PATH:$GOPATH/bin

11

Bạn cũng sẽ cần GOPATH sau này. Vì vậy, thêm nó vào ~/.bashrc.


10
Vâng, tôi đã nghĩ đến điều này, nhưng bác bỏ khả năng một anh chàng sẽ có một hộp Ubuntu có vỏ tùy chỉnh và không biết nó rất khó xảy ra :-)
Vytautas Shaltenis

9

Nếu bạn đã thiết lập bất cứ điều gì cần sửa đổi các biến môi trường, ví dụ Java, Go, thì điều này sẽ rất quen thuộc.

Tôi sẽ giả sử rằng bạn có cấu trúc thư mục sau ở đâu đó dưới dạng đường dẫn Go của bạn:

\---[folder name]
    +---bin
    +---pkg
    \---src
  • mở một nhà ga mới
  • kiểu sudo nano /etc/environment
  • tìm PATH=...và đi đến cuối của nó và thêm dấu hai chấm :sau đường dẫn cuối cùng rồi dán vào phần đầy đủ của bạn, go pathvd/home/user/gocode

và bạn đã hoàn thành, Điều này sẽ làm cho nó bền bỉ trong hệ thống.


1
Tôi không thấy lý do tại sao thay đổi $ PATH nếu đi làm việc cho David. Anh ta cần đặt $ GOPATH (xem câu trả lời từ Daniel Lin). David có thể hợp nhất cả hai cách tiếp cận (hoặc đặt nó trong / etc / profile hoặc $ HOME / .profile). Nhân tiện, tôi khuyên David nên đọc các liên kết sau: golang.org/doc/installgolang.org/doc/code.html#GOPATH
zk82

2
@ zk82 $ GOPATH là một biến môi trường và tôi không hiểu tại sao chỉnh sửa biến môi trường của bạn để thêm biến này vào vấn đề. Tương tự với $ JAVA_HOME và các khung công tác khác yêu cầu cấu hình như vậy.
ymg

OK, tôi hiểu rồi. Cám ơn bạn đã góp ý.
zk82

3

Đây là những gì nó hoạt động với tôi trên Ubuntu 15.10 bằng cách sử dụng fish shell:

# ~/.config/fish/config.fish

set -g -x PATH /usr/local/bin $PATH
set -g -x GOPATH /usr/share/go

Sau đó, tôi đã phải thay đổi quyền trên gothư mục (nó đã được đặt thành root)

sudo chown <name>:<name> -R /usr/share/go

3

đường dẫn đi có thể là mọi nơi bạn muốn chỉ cần tạo một thư mục và đặt biến đường dẫn chung trong tên của GOPATH cho môi trường của bạn.

mkdir ~/go
export GOPATH=~/go
go get github.com/go-sql-driver/mysql

2

Với Go 1.8 (Q2 2017), bạn sẽ không phải chỉnh sửa bất kỳ tệp nào nếu bạn chấp nhận GOPATHgiá trị mặc định (được đặt cho bạn)

$HOME/go

Bạn có thể xem các bình luận về vấn đề 17262phiếu bầu twitter liên quan :

Bằng cách chọn mặc định GOPATH, chúng tôi có thể làm cho tài liệu của mình dễ dàng hơn vì chúng tôi có thể nói những điều như

$ go get github.com/foo/bar

sẽ kiểm tra github.com/foo/barrepo vào $HOME/go/src/github.com/foo/bar.

Chúng ta không cần phải phân tâm người mới với việc phải đặt var env, tất cả những gì chúng ta cần làm là đặt một ghi chú nhỏ về phụ huynh ở cuối trang

$HOME/golà đường dẫn mặc định tới không gian làm việc của bạn.
Nếu bạn muốn thay đổi đường dẫn này, hãy đặt GOPATHbiến thành thứ bạn chọn.


2

Môi trường đi của tôi trông tương tự như của bạn.

$go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go-1.6"
GOTOOLDIR="/usr/lib/go-1.6/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

Tôi đã giải quyết nó bằng cách đặt GOPATH thành / usr / lib / go . Hãy thử nó.

export GOPATH=/usr/lib/go
export PATH=$PATH:$GOPATH/bin

Tôi đọc được ở đâu đó rằng cài đặt GOPATH giống như thư mục cài đặt là một ý tưởng tồi. Oo
ankush981

2

GOPATH là một biến môi trường cho vị trí không gian làm việc của bạn. GOROOT là một biến môi trường cho thư mục cài đặt của bạn. Mặc dù GOROOTGOPATH được đặt tự động (nếu không có lỗi) trong thời gian cài đặt, để chỉ định thủ công, bạn có thể thực hiện theo quy trình dưới đây. Hơn nữa, để biết thêm thông tin, bạn có thể tham khảo trang wiki của GO .

Tốt hơn là đặt GOPATH vào một thư mục bên trong thư mục chính của bạn, ví dụ: $ HOME / go,% USERPROFILE% \ go (Windows).

  1. Đây là một giải pháp mac, được thử nghiệm trên macOS Sierra, ver. 10.12, và cả trong Gogland-EAP, được JetBrains giới thiệu là một IDE cho lập trình Go.

Trên loại thiết bị đầu cuối của bạn

vim ~/.profile

trong tài liệu đã mở trên Terminal nhấn i và thêm đường dẫn sau

GOPATH=/path/to/a/directory/inside/home/directory
GOROOT=/path/to/you/go/library
PATH=$PATH:$GOPATH:$GOROOT:$GOROOT/bin

nhấn ESC và gõ : x . Cuối cùng, bạn nên khởi động lại ( đóngmở ) thiết bị đầu cuối của bạn hoặc Đăng xuấtĐăng nhập lại.

  1. Để biết cấu hình Windows và Linux, vui lòng tham khảo trang wiki tại Githab về Cài đặt GOPATH-Golang .

THẬN TRỌNG Không đặt cả GOROOTGOPATH vào cùng một thư mục, nếu không bạn sẽ nhận được cảnh báo.


2
export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin

Và bạn có thể muốn kiểm tra bằng $ go env


2

(Ubuntu)

Nếu bạn không đặt GOPATH, mặc định sẽ được sử dụng.

Bạn phải thêm $ GOPATH / bin vào PATH của mình để thực thi bất kỳ tệp nhị phân nào được cài đặt trong $ GOPATH / bin hoặc bạn cần nhập $ GOPATH / bin / lệnh. Thêm phần này vào ~ / .bash_profile của bạn

export PATH=$GOPATH/bin:$PATH

Lệnh GOPATH hiện tại:

go env GOPATH

Thay đổi lệnh GOPATH:

export GOPATH=$HOME/your-desired-path


0

Đây là điều khó chịu nhất để giải quyết. Với hy vọng tiết kiệm thời gian của bạn.

IF đi đã được cài đặt như người dùng root. Người dùng root của tệp văn bản bash_profile của hệ thống của bạn ~ / .bash_profile cần có $ GOROOT được gán cho thư mục cài đặt go và $ GOPATH cần được gán cho thư mục go / src.

  ...$# sudo su
  ...$# vi ~/.bash_profile

    ***Story continues in vi editor***

    GOROOT=$GOROOT:/usr/local/go
    GOPATH=$GOPATH:/usr/local/go/src
    ...
    [your regular PATH stuff here]
    ...

hãy chắc chắn đường dẫn đi nhị phân nằm trong đường dẫn của bạn trên .bash_profile

PATH = $ PATH: $ HOME / bin: / usr / local / bin: / usr / local / go / bin

PATH này có thể dài bằng một chuỗi cần thiết..để thêm các mục mới chỉ được phân tách bằng dấu hai chấm:

thoát vi biên tập và lưu hồ sơ bash (: wq là viết tắt của ghi và thoát)

  [esc] 
  [shift] + [:] 
  :wq

Bạn phải đăng xuất khỏi thiết bị đầu cuối và đăng nhập lại vào hồ sơ để bắt đầu lại..hoặc bạn chỉ có thể khởi động nó bằng cách sử dụng xuất.

...$# export GOPATH=/usr/local/go/src

Bạn có thể xác minh đi env:

...$# go env

Yay!

GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/usr/local/go/src"
GORACE=""
GOROOT="/usr/local/go"

Bây giờ bạn có thể sudo và go sẽ có thể tải xuống và tạo các thư mục bên trong go / src và bạn có thể tìm hiểu những gì bạn đang cố gắng thực hiện.

thí dụ

# sudo go get github.com/..

Bây giờ bạn sẽ gặp vấn đề khác..bạn có thể chưa cài đặt git..đó là một cuộc phiêu lưu khác .. :)


Đừng làm điều này. Bạn không muốn biên dịch mọi thứ là root và bạn không muốn go getđặt bất cứ thứ gì ở gần GOROOT.
Dave C

Làm thế nào để một người chạy đi dưới một người dùng bình thường? Cám ơn rất nhiều. Mọi thứ không hoạt động trong quá trình cài đặt và cuối cùng tôi đã sử dụng máy ảo thử nghiệm để dùng thử GO.
dùng3151532

0

Trên máy Fedora 20 của tôi, tôi đã thêm các dòng sau vào ~ / .bashrc:

export GOROOT=/usr/lib/golang
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

3
Đừng thiết lậpGOROOT . (Trừ khi bạn ở trong nhóm nhỏ cực kỳ nhỏ của những người sử dụng phân phối nhị phân của Go nhưng cài đặt nó ở nơi không chuẩn.)
Dave C

0

Một giải pháp khác: Xuất khẩu mọi GO*biến môi trường từgo env

.bashrc:

eval $(go env | grep '^GO[A-Z0-9_]*=' | while read setenv; do
  echo "export $setenv; "
done 2> /dev/null)

[[ -n $GOPATH ]] || export GOPATH="$HOME/go/bin"
[[ -n $GOROOT ]] || export GOROOT=/usr/bin/go
export PATH="$PATH:$GOPATH/bin:$GOROOT/bin"

1
evalthường là một ý tưởng tồi và quá mức cần thiết trong tình huống này IMHO
Paweł Prażak

@ PawełPrażak Tại sao? (Tôi không phải là chuyên gia về kịch bản shell)
DMaster

1
nếu có lỗi trong những gì được đánh giá, hậu quả có thể gây đau đớn; Ở đây câu hỏi là làm thế nào để GOPATHchỉ xuất khẩu
Paweł Prażak

0

Chỉnh sửa của bạn ~/.bash_profileđể thêm dòng sau:

$ export GOPATH=$HOME/work

Lưu và thoát khỏi trình soạn thảo của bạn. Sau đó, nguồn của bạn~/.bash_profile

$ source ~/.bash_profile

Lưu ý: Đặt đường dẫn GOBIN để tạo tệp nhị phân khi cài đặt đi chạy

$ export GOBIN=$HOME/work/bin


-1

Như được viết trong hướng dẫn chính thức :

Biến môi trường GOPATH chỉ định vị trí của không gian làm việc của bạn. Nó mặc định là một thư mục có tên đi vào trong thư mục nhà của bạn, vì vậy $ HOME / đi trên Unix, $ home / go trên Gói 9 và% USERPROFILE% \ go (thường là C: \ Users \ YourName \ go) trên Windows. Nếu bạn muốn làm việc ở một vị trí khác, bạn sẽ cần đặt GOPATH theo đường dẫn đến thư mục đó. (Một thiết lập phổ biến khác là đặt GOPATH = $ HOME.) Lưu ý rằng GOPATH không được cùng đường dẫn với cài đặt Go của bạn.

Vì vậy, ví dụ, nếu bạn đang mã hóa trong Jetbrains Webstorm (sử dụng plugin Go ), bạn có thể muốn đặt GOPATHthành /Users/<user>/WebstormProjects.

Nói cách đơn giản hơn, đặt nó ở bất cứ nơi nào bạn muốn các dự án Go của bạn cư trú.


-1

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


-1

Bạn phải cập nhật PATH dựa trên thiết bị đầu cuối (bash hoặc zsh) mà bạn sử dụng.

  1. Mở tệp script shell của terminal tức là ~/.bashrchoặc ~/.zshrctrong trình chỉnh sửa
   vi ~/.zshrc
      (or)
   code ~/.zshrc
  1. Cập nhật GOPATH dưới đây nếu đã tìm thấy hoặc thêm dòng dưới đây.

export GOPATH=$HOME/go:/$HOME/projects/go

Tại đây, bạn có thể thêm một hoặc nhiều đường dẫn được phân tách bằng dấu chấm phẩy :từ các vị trí khác nhau của các dự án GO của bạn trên hệ thống vào GOPATHbiến môi trường, /path/1:path/2:path/3v.v.

Trong trường hợp của tôi, tôi đã thêm 2 đường dẫn, như được hiển thị ở trên, một từ gốc $HOME/govà một đường dẫn từ thư mục dự án:/$HOME/projects/go

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.