ค่าของ GOPATH และ GOROOT ควรเป็นอย่างไร


323

ฉันพยายามติดตั้งdoozerเช่นนี้:

$ goinstall github.com/ha/doozer

ฉันได้รับข้อผิดพลาดเหล่านี้

goinstall: os: go/build: package could not be found locally
goinstall: fmt: go/build: package could not be found locally
goinstall: io: go/build: package could not be found locally
goinstall: reflect: go/build: package could not be found locally
goinstall: math: go/build: package could not be found locally
goinstall: rand: go/build: package could not be found locally
goinstall: url: go/build: package could not be found locally
goinstall: net: go/build: package could not be found locally
goinstall: sync: go/build: package could not be found locally
goinstall: runtime: go/build: package could not be found locally
goinstall: strings: go/build: package could not be found locally
goinstall: sort: go/build: package could not be found locally
goinstall: strconv: go/build: package could not be found locally
goinstall: bytes: go/build: package could not be found locally
goinstall: log: go/build: package could not be found locally
goinstall: encoding/binary: go/build: package could not be found locally

3
@Motin ลิงก์ด้านบนใช้ไม่ได้อีกต่อไป
Jorrit Reedijk

ไฟล์ล้าสมัยสำหรับโครงการ พบปัญหาที่เกี่ยวข้องกับ OSX ที่นี่: github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
Motin

หมายเหตุ: โดยค่าเริ่มต้นGOPATHจะถูกตั้งค่าสำหรับคุณใน Go 1.8 (2017) ดูคำตอบของฉันด้านล่าง
VonC

ใช่ฉันก็พบว่าสิ่งที่สับสนเหล่านี้เช่นกันวิธีการจัดระเบียบ godocs สิ่งนี้ช่วย: albertech.blogspot.com/2017/01/…
jar

1
@BenyaminJafari เพราะgoinstallเป็น pre-Go1 ที่เก่าแก่จริงๆและไม่มีอยู่ตั้งแต่ 2555
เดฟ C

คำตอบ:


310

GOPATHกล่าวถึงในcmd/goเอกสารประกอบ :

GOPATHตำแหน่งรายการตัวแปรสภาพแวดล้อมที่จะมองหารหัสไป บน Unix ค่าจะเป็นสตริงที่คั่นด้วยโคลอน บน Windows ค่าคือสตริงที่คั่นด้วยเครื่องหมายอัฒภาค บนแผน 9 ค่าเป็นรายการ

GOPATH จะต้องตั้งค่าให้รับสร้างและติดตั้งแพคเกจนอกต้นไม้ Go มาตรฐาน

GOROOTอธิบายไว้ในคำแนะนำการติดตั้ง :

การกระจายแบบไบนารีของ Go ถือว่าพวกเขาจะถูกติดตั้งใน /usr/local/go(หรือc:\Goภายใต้ Windows) แต่มันเป็นไปได้ที่จะติดตั้งเครื่องมือ Go ไปยังตำแหน่งอื่น ในกรณีนี้คุณต้องตั้งค่า GOROOTตัวแปรสภาพแวดล้อมให้ชี้ไปที่ไดเรกทอรีที่ติดตั้งไว้

ตัวอย่างเช่นหากคุณติดตั้งไปที่โฮมไดเร็กตอรี่ของคุณคุณควรเพิ่มคำสั่งต่อไปนี้ลงใน$HOME/.profile:

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

หมายเหตุ: GOROOTต้องตั้งค่าเมื่อติดตั้งไปยังตำแหน่งที่กำหนดเองเท่านั้น

(เวอร์ชันล่าสุดของคำตอบของChris Bunch )


44
ข้อมูลที่ครอบคลุมมากขึ้นเกี่ยวกับ GOPATH อยู่ที่How to Write Go Code ความเข้าใจในข้อมูลที่จำเป็นสำหรับการทำความเข้าใจgoคำสั่งซึ่งจำเป็นสำหรับการทำงานกับ Go ตัวอย่างเช่นการใช้งานgoinstallOP ควรจะเป็นgo getเช่นนี้
Sonia

13
นอกจากนี้ยังทราบเส้นทางการติดตั้งจริงของการเดินทาง ยกตัวอย่างเช่นในการติดตั้ง homebrew ค่าเริ่มต้น homebrew /usr/local/Cellar/go/จะติดตั้งไป ในกรณีนี้เส้นทางการส่งออกควรจะตั้งด้วยและexport GOROOT=/usr/local/Cellar/go/{version} export PATH=$PATH:$GOROOT/bin
ekillaby

10
ฉันต้องทำexport GOROOT=/usr/local/Cellar/go/1.2/libexec/เพื่อให้ฉันได้ทำงานกับการชง
Steven Soroka

ฉันไม่สามารถแนะนำการแก้ไขนี้ได้เพราะแอพบ่นว่าการแก้ไขของฉัน "ดูเหมือนจะมี" รหัสที่ยังไม่ฟอร์แมต (ซึ่งมันไม่ได้; ขอบคุณมาก SO) แต่:
Wildcard

เริ่มต้นใน Go 1.10 ถ้า GOROOT ไม่ได้ตั้งค่าเครื่องมือ go จะพยายามหาตำแหน่งของตัวเอง ฉันยังไม่สามารถวางลิงก์ได้เนื่องจากการวางไม่ทำงานในแอป iOS ของ Stack Exchange ตอนนี้ผิดหวังมาก
Wildcard

97

นี่คือการตั้งค่าง่าย ๆ ของฉัน:

directory for go related things: ~/programming/go
directory for go compiler/tools: ~/programming/go/go-1.4
directory for go software      : ~/programming/go/packages

GOROOT, GOPATH, PATH ถูกตั้งค่าดังนี้:

export GOROOT=/home/user/programming/go/go-1.4
export GOPATH=/home/user/programming/go/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

ดังนั้นในระยะสั้น:

GOROOT สำหรับการรวบรวม / เครื่องมือที่มาจากการติดตั้งไป
GOPATH สำหรับโครงการ Go ของคุณ / ห้องสมุดบุคคลที่สาม (ดาวน์โหลดด้วย "go get")


ฉันคิดว่าคำตอบนี้ง่ายต่อการเข้าใจเนื่องจากมีการจับคู่กับโครงสร้างโฟลเดอร์
h-ไร่

GOPATH รวมทั้งแผนผังโครงการทั้งหมด (เช่น git) กับไฟล์ที่ไม่ได้ไป - เช่นรูปภาพสคริปต์สร้างไฟล์ ฯลฯ หรือไม่
Serge Merzliakov

52

go envการทำงานครั้งแรก
หากคุณเห็นว่าไม่ได้ติดตั้ง go คุณสามารถติดตั้งผ่านhomebrewหรือผ่านแพ็คเกจและ / หรือวิธีอื่น ๆ
หากคุณเห็นผลลัพธ์แสดงว่าคุณได้Goรับการติดตั้งแล้ว
มันแสดงให้คุณเห็น envs ทั้งหมดที่มีการตั้งค่าและไม่ได้

หากคุณเห็นว่าว่างเปล่าสำหรับGOROOT:

  1. Run which go(บนคอมพิวเตอร์ของฉัน: /usr/local/go/bin/go)
  2. จากนั้นส่งออกเช่นนี้ export GOROOT=/usr/local/go

หากคุณเห็นว่าว่างเปล่าสำหรับGOPATH:

  1. สร้างไดเรกทอรีใดก็ได้ในคอมพิวเตอร์ของคุณเพื่อทำโปรเจคในกรณีของฉัน: ~/GO_PROJECTS
  2. แล้วก็ export GOPATH=~/GO_PROJECTS

2
which goทำเพื่อฉัน มันใช้สถานที่ติดตั้งอื่นไปจากการติดตั้งก่อนหน้านี้โดยใช้ Chocolatey ลบโฟลเดอร์นั้นและลบออกจากตัวแปร PATH ตอนนี้มันใช้งานได้ ขอบคุณ!
sgarg

which goคำสั่งไม่ทำงานสำหรับฉันใน Windows 7 ฉันจะหาที่ฉันควรเรียกใช้คำสั่งนี้ได้อย่างไร
firstpostcommenter

คำสั่ง windows ที่เกี่ยวข้องคือwhere goมันจะแสดงพา ธ ของไฟล์ที่ถูกเรียกใช้
Falco

export GOPATH=~/GO_PROJECTSทำงานได้ดี
Thamaraiselvam

39

GOPATHมีการกล่าวถึงที่นี่ :

GOPATHตัวแปรสภาพแวดล้อม

GOPATH อาจถูกตั้งค่าเป็นรายการพา ธ ที่คั่นด้วยโคลอนซึ่งอาจพบรหัส Go วัตถุแพ็คเกจและไฟล์ปฏิบัติการ

ตั้งค่าเป็นGOPATHใช้ goinstall เพื่อสร้างและติดตั้งรหัสของคุณเองและไลบรารี่ภายนอกของทรี Go (และหลีกเลี่ยงการเขียน Makefiles)

และGOROOTจะกล่าวถึงที่นี่ :

$GOROOT$HOME/goรากของต้นไม้ไปบ่อย ค่าเริ่มต้นนี้เป็นพาเรนต์ของไดเรกทอรีที่all.bashเรียกใช้ หากคุณเลือกที่จะไม่ตั้งค่า$GOROOTคุณต้องเรียกใช้ gomake แทน make หรือ gmake เมื่อพัฒนาโปรแกรม Go โดยใช้ makefiles ทั่วไป


ดังนั้นถ้าฉันไปติดตั้งที่ ~ / projects / go ค่าของตัวแปรควรจะหา os, fmt, etc อย่างไร
jshen

2
แล้ว Go จะติดตั้งที่ไหนเมื่อคุณsudo apt-get install golang?
weberc2

9
@ weberc2 ถ้าคุณทำงานgo envคุณจะเห็นข้อมูลว่าสำหรับฉันมันเป็น/usr/lib/go/
อังเดร

19

ฉันอ่านgo help gopathเอกสารและยังคงสับสนอย่างไม่น่าเชื่อ แต่พบว่านักเก็ตตัวเล็ก ๆ จากหน้า doc อีกอัน:

ตัวแปรสภาพแวดล้อม GOPATH ระบุตำแหน่งของพื้นที่ทำงานของคุณ อาจเป็นตัวแปรสภาพแวดล้อมเพียงอย่างเดียวที่คุณจะต้องตั้งค่าเมื่อพัฒนาโค้ด Go

http://golang.org/doc/code.html#GOPATH


10

GOPATH ไม่ควรชี้ไปที่การติดตั้ง Go แต่ควรไปที่พื้นที่ทำงานของคุณ (ดูhttps://golang.org/doc/code.html#GOPATH ) เมื่อใดก็ตามที่คุณติดตั้งแพคเกจด้วยการติดตั้งไปหรือไปมันจะลงจอดภายใน GOPATH นั่นคือเหตุผลที่มันเตือนคุณว่าคุณไม่ต้องการทิ้งแพคเกจแบบสุ่มจากอินเทอร์เน็ตในการติดตั้งอย่างเป็นทางการของคุณ


9

เริ่มต้นด้วย go 1.8 (Q2 2017) GOPATH จะถูกตั้งไว้ให้คุณโดยเริ่มต้นที่ $ HOME / go

ดูความคิดเห็นของปัญหา 17262และ Rob Pike:

$HOME/goมันจะเป็น.
ไม่มีคำตอบเดียวที่ดีที่สุดคือ แต่นี้สั้นและหวานและมันอาจจะมีปัญหาในการเลือกชื่อที่ถ้ามีอยู่แล้วซึ่งจะมีเพียงความสุขสำหรับผู้เชี่ยวชาญที่มีอยู่แล้วไปติดตั้งและจะเข้าใจ$HOME/goGOPATH


หัวข้อที่เรียบง่ายนั้นจะซับซ้อนได้อย่างไร! ขอบคุณสำหรับคำตอบที่ดีที่สุดที่นี่
dodgy_coder

@dgygy_coder ที่จริง ... ดูที่สองบรรทัดแรกของคำตอบอื่น ๆ ของฉัน: stackoverflow.com/a/37905102/6309 ;) ที่อาจจบลงด้วยความเรียบง่ายยิ่งขึ้น: ไม่มี GOPATH อีกเลย! รายละเอียดเพิ่มเติมในstackoverflow.com/a/48914523/6309
VonC

ใช่ฉันเห็นด้วย GOPATH ไม่จำเป็นต้องใช้จริงถ้าคุณใช้ค่าเริ่มต้นถูกต้องหรือไม่ ฉันต้องตั้งค่าต่อไปเนื่องจากเป็นสิ่งจำเป็นสำหรับสภาพแวดล้อมการพัฒนาของ Google App Engine (Go Standard) พวกเขาบอกให้คุณตั้ง GOPATH แต่อย่าบอกคุณว่าให้ตั้งค่าเป็น .. !
dodgy_coder

@dodgy_coder ใช่โดยค่าเริ่มต้น Go จะค้นหา PATH โครงการในค่าที่กำหนดไว้ล่วงหน้า
VonC

6

ดังกล่าวข้างต้น:

ตัวแปรสภาพแวดล้อม GOPATH ระบุตำแหน่งของพื้นที่ทำงานของคุณ

สำหรับ Windowsสิ่งนี้ใช้ได้กับฉัน (ในหน้าต่าง Ms-dos):

set GOPATH=D:\my_folder_for_go_code\

สิ่งนี้จะสร้างตัวแปร GOPATH ที่ Ms-dos รู้จักเมื่อใช้ดังนี้:

cd %GOPATH%

3

เกี่ยวกับGOROOTเฉพาะ Go 1.9 จะตั้งค่าโดยอัตโนมัติไปยังเส้นทางการติดตั้ง
แม้ว่าคุณจะติดตั้ง Go หลายตัวการเรียกใช้ 1.9.x จะถูกตั้งค่าGOROOTเป็น/path/to/go/1.9(ก่อนหน้าหากไม่ได้ตั้งค่ามันจะถือว่าเป็นเส้นทางเริ่มต้นเช่น/usr/local/goหรือc:\Go)

ดูรีวิว CL Go Go 53370 :

go toolตอนนี้จะใช้เส้นทางจากที่ที่มันถูกเรียกจะพยายามที่จะหารากของไปติดตั้งต้นไม้
ซึ่งหมายความว่าหากการติดตั้ง Go ทั้งหมดถูกย้ายไปยังตำแหน่งใหม่go toolควรดำเนินการต่อตามปกติ

สิ่งนี้อาจ overriden โดยการตั้งค่าGOROOTในสภาพแวดล้อมซึ่งควรทำในสถานการณ์ที่ผิดปกติเท่านั้น
โปรดทราบว่าสิ่งนี้จะไม่ส่งผลต่อผลลัพธ์ของruntime.GOROOT()ฟังก์ชันซึ่งจะรายงานตำแหน่งการติดตั้งเดิมต่อไป สิ่งนี้อาจได้รับการแก้ไขในรุ่นที่ใหม่กว่า


0

ตั้งแต่ปี 2020 และรุ่น Go 1.13+ ใน Windows วิธีที่ดีที่สุดสำหรับการอัปเดต GOPATH ก็เพียงแค่พิมพ์คำสั่งที่พร้อมท์:

setx GOPATH C:\mynewgopath

0

นี่คือทางออกหนึ่ง (ผู้ใช้คนเดียว):

GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH

goบ่นถ้าคุณเปลี่ยนไป.gopath.go

ฉันหวังว่าพวกเขาจะไปด้วยวิธีที่rust/cargoพวกเขาทำและแค่วางทุกอย่างไว้ในที่เดียว


-1

ใน osx ฉันติดตั้งกับ brew นี่คือการตั้งค่าที่เหมาะกับฉัน

GOPATH="$HOME/my_go_work_space" //make sure you have this folder created

GOROOT="/usr/local/Cellar/go/1.10/libexec"


-1

นอกจากนี้ยังมีกรณีที่เมื่อเราใช้ไปมันรวบรวมไฟล์ไปทั้งหมด

ดังนั้นสมมติว่าเรามีไฟล์main.goหนึ่งไฟล์และต่อมาเราเปลี่ยนไฟล์ปัจจุบันเป็นmain_old.goและเพิ่มไฟล์main.goใหม่ของเรา จากนั้นเมื่อเราสร้างแอพของเราไฟล์ go ทั้งหมดจะถูกรวบรวม ดังนั้นข้อผิดพลาดที่เกิดขึ้นอาจเกิดจากข้อผิดพลาดในการคอมไพล์ในไฟล์ go อื่น ๆ


-1

เมื่อติดตั้ง Go lang แล้ว GOROOT จะเป็นไดเรกทอรีรูทของการติดตั้ง

เมื่อฉันระเบิดเลขฐานสองของ Go Lang ในไดเรกทอรี Windows C: \ GOROOT ของฉันควรเป็น C: \ go หากติดตั้งด้วยตัวติดตั้ง Windows อาจเป็น C: \ Program Files \ go (หรือ C: \ Program Files (x86) \ go สำหรับแพ็คเกจ 64 บิต)

 GOROOT = C:\go

ในขณะที่ GOPATH ของฉันคือที่ตั้งของซอร์สโค้ด Go lang หรือเวิร์กสเปซ

หากซอร์สโค้ด Go lang ของฉันอยู่ที่ C: \ Users \\ GO_Workspace GOPATH ของคุณจะเป็นดังนี้:

 GOPATH = C:\Users\<xyz>\GO_Workspace

-1

คุณไม่จำเป็นต้องตั้งค่าอย่างชัดเจน GOROOT (รุ่น Go ของ Modern สามารถคิดออกเองตามตำแหน่งของไบนารีไปที่คุณเรียกใช้)

นอกจากนี้ยังได้รับข้อผิดพลาดการติดตามเมื่อพยายามทำงานกับvgo:

go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

ลบ GOROOT อัปเดต GOPATH ของฉันและ export GO111MODULE="on"แก้ไขปัญหา

GOPATH ดูที่นี่

GOPATH อาจถูกตั้งค่าเป็นรายการพา ธ ที่คั่นด้วยโคลอนซึ่งอาจพบรหัส Go วัตถุแพ็คเกจและไฟล์ปฏิบัติการ

ตั้งค่า GOPATH เพื่อใช้ goinstall เพื่อสร้างและติดตั้งรหัสของคุณเองและไลบรารี่ภายนอกที่อยู่นอกแผนผัง Go (และเพื่อหลีกเลี่ยงการเขียน Makefiles)



-3

หากคุณกำลังใช้ distro go คุณควรชี้ไปที่ตำแหน่งของไฟล์ include เช่น:

$ rpm -ql golang | grep include
/usr/lib/golang/include

(นี่สำหรับ Fedora 20)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.