ไม่สามารถดาวน์โหลดได้ แต่ไม่ได้ตั้งค่า $ GOPATH


150

ฉันต้องการติดตั้ง json2csv โดยใช้go get github.com/jehiah/json2csvแต่ฉันได้รับข้อผิดพลาดนี้:

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

ความช่วยเหลือเกี่ยวกับวิธีการแก้ไขใน MacOS?



1
ดูเพิ่มเติมที่: stackoverflow.com/questions/17872223/…
Shog9

3
ฉันมีปัญหาเดียวกันกับแพ็กเกจอื่น (ลูกสุนัข) ผู้ดูแลระบบ C'mon Go โปรดสร้างตัวติดตั้ง (OS X) ที่ทำงานให้เสร็จ! ตัวติดตั้ง OS X สำหรับโหนดเป็นตัวอย่างที่ยอดเยี่ยม การใช้ Node ไม่ต้องการขั้นตอนการติดตั้งเพิ่มเติมด้วยตนเอง มันใช้งานได้ ฉันหวังว่าตัวติดตั้ง Go ในอนาคตจะดีขึ้น
jwfearn

คำตอบ:


140

[อัปเดต: ตั้งแต่ Go 1.8, เป็นGOPATHค่าเริ่มต้น$HOME/goแต่คุณยังอาจพบว่ามีประโยชน์นี้หากคุณต้องการทำความเข้าใจกับGOPATHเลย์เอาต์ปรับแต่ง ฯลฯ ]

อย่างเป็นทางการไปเว็บไซต์กล่าวถึง GOPATH และวิธีการที่จะออกวางไดเรกทอรีพื้นที่ทำงาน

export GOPATH="$HOME/your-workspace-dir/"- รันมันในเชลล์ของคุณจากนั้นเพิ่มไปยัง~/.bashrcหรือเทียบเท่าดังนั้นมันจะถูกตั้งค่าสำหรับคุณในอนาคต ไปจะติดตั้งแพคเกจภายใต้src/, bin/และpkg/ไดเรกทอรีย่อยมี คุณจะต้องวางแพคเกจของคุณเองที่อื่น$GOPATH/srcเช่น$GOPATH/src/github.com/myusername/ถ้าคุณต้องการเผยแพร่ไปยัง GitHub คุณจะยังอาจต้องการexport PATH=$PATH:$GOPATH/binของคุณในโปรแกรมเพื่อให้คุณสามารถทำงานภายใต้การเรียบเรียง.bashrc$GOPATH

เลือกผ่านทางร็อบหอกคุณยังสามารถตั้งค่าCDPATHเพื่อให้มันเร็วขึ้นเพื่อcdการแพคเกจ dirs ในทุบตี: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/xหมายความว่าคุณสามารถเพียงพิมพ์แทนcd net/htmlcd $GOPATH/src/golang.org/x/net/html

Keith Rarick ตั้งข้อสังเกตว่าคุณสามารถตั้งค่าGOPATH=$HOMEให้วาง Go's src/ได้pkg/และbin/ไดเรกทอรีต่างๆ นั่นอาจเป็นสิ่งที่ดี (ตัวอย่างเช่นคุณอาจมีอยู่แล้ว$HOME/binในเส้นทางของคุณ) แต่แน่นอนว่าบางคนใช้พื้นที่ทำงานหลายแห่งเป็นต้น


ขอบคุณสำหรับข้อมูล. คุณต้องการเปลี่ยนพื้นที่ทำงานของคุณสำหรับแต่ละโครงการหรือไม่
Doug Molineux

1
โดยทั่วไปไม่มีคุณสามารถใช้พื้นที่ทำงานซึ่งsrc/ประกอบด้วยเช่นและgithub.com/youruser/x github.com/youruser/yนั่นคือสิ่งที่ฉันทำ. ผู้คนอาจมีเหตุผลที่ต้องทำอย่างอื่น (นโยบายของ บริษัท เพื่อแยกโครงการออกจากกัน?) แต่ฉันไม่สามารถพูดกับสิ่งนั้นได้
twotwotwo

3
มีการตั้งค่า $ GOPATH แต่ "ไม่สามารถดาวน์โหลดได้ แต่ไม่ได้ตั้งค่า $ GOPATH สำหรับรายละเอียดเพิ่มเติมดู: go help gopath" ปรากฏขึ้น
Tyguy7

แพลตฟอร์มใด (Windows หรือ Linux / OS X / Unix อื่น ๆ ) ถ้าไม่ใช่ Windows สิ่งที่จะecho $GOPATHพูด? มันอาจจะคุ้มค่าที่จะโพสต์เป็นคำถามแยกต่างหาก ดูเหมือนว่าคุณกำลังอยู่ในสถานการณ์ที่ผิดปกติและการแก้ไขข้อบกพร่องในความคิดเห็นอาจเป็นเรื่องยุ่งยาก
twotwotwo

2
@ โอกาสที่คุณไม่ได้ทำexportมันTyguy7 ; ทำงาน/bin/bash -c "echo \$GOPATH"เพื่อตรวจสอบว่ากระบวนการย่อยสามารถดู$GOPATH; ถ้ามันว่างเปล่าให้เรียกใช้export GOPATHแล้วgo get ...
sanmai


33

การใช้ชง

brewผมติดตั้งได้โดยใช้

$ brew install go

เมื่อเสร็จแล้วหากคุณเรียกใช้คำสั่งชงนี้มันจะแสดงข้อมูลต่อไปนี้:

$ 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

ชิ้นส่วนที่สำคัญมีบรรทัดเหล่านี้:

/usr/local/Cellar/go/1.4.2 (4676 ไฟล์ 158M) *

ส่งออก PATH = $ PATH: / usr / local / opt / go / libexec / bin

การตั้งค่าสภาพแวดล้อมของ GO

ที่แสดงตำแหน่งที่ติดตั้ง GO เราต้องทำสิ่งต่อไปนี้เพื่อตั้งค่าสภาพแวดล้อมของ GO:

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

จากนั้นคุณสามารถตรวจสอบโดยใช้ GO เพื่อดูว่ามีการกำหนดค่าอย่างถูกต้องหรือไม่:

$ 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"

ตั้งค่า json2csv

ดูดีดังนั้นให้ติดตั้งjson2csv:

$ go get github.com/jehiah/json2csv
$

เกิดอะไรขึ้น? มันติดตั้งมัน คุณสามารถตรวจสอบสิ่งนี้:

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

ตกลงดังนั้นทำไมฉันพิมพ์json2csvในเปลือกไม่ได้? นั่นเป็นเพราะ/binภายใต้ไดเรกทอรีไม่ได้อยู่ในของคุณ$GOPATH$PATH

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

ดังนั้นให้เพิ่มชั่วคราว:

$ export PATH=$GOPATH/bin:$PATH

และตรวจสอบอีกครั้ง:

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

ตอนนี้มันอยู่ที่นั่น:

$ 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

เพิ่มการปรับเปลี่ยนที่เราได้ทำไป$PATHและ$GOPATHที่คุณ$HOME/.bash_profileจะทำให้พวกเขายังคงอยู่ระหว่างการเริ่มต้นใหม่


18

ดูวิดีโอ

โดยทั่วไปฉันแนะนำวิดีโออย่างเป็นทางการนี้จาก Go เพื่อรับภาพรวมอย่างรวดเร็วเกี่ยวกับเรื่องนี้:

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

มันง่ายที่จะแสดงมากกว่าที่จะบอก

@jwfearnถอดความส่วนสำคัญของวิดีโอ:

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


2
วิดีโอแนะนำเบื้องต้นยอดเยี่ยม - ฉันเข้าใจดีกว่าเสมอเมื่อมันปรากฏต่อฉัน
Joshua Pinter

3
ขอบคุณ @jwfearn - วิดีโอสำหรับเพลงและความบันเทิงอื่น ๆ ไม่สามารถคัดลอกและวางจากพวกเขา :-)
kguest


3

สำหรับ MAC มันใช้งานได้ดีสำหรับฉัน

sudo nano /etc/bashrc

และเพิ่มด้านล่างในตอนท้ายของไฟล์

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

สิ่งนี้ควรแก้ไขปัญหา ลองเปิดเทอร์มินัลใหม่และ echo $ GOPATH คุณควรเห็นค่าที่ถูกต้อง


2

(สำหรับ MAC)

ฉันลองคำตอบทั้งหมดเหล่านี้และด้วยเหตุผลบางอย่างที่ยังไม่ทราบสาเหตุก็ไม่ได้ผล

ฉันต้อง "บังคับให้ฟีด" GOPATH โดยการตั้งค่าตัวแปรสภาพแวดล้อมสำหรับทุกคำสั่งที่จำเป็น ตัวอย่างเช่น:

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

แม้แต่glideทำให้ฉันมีGOPATH not setข้อผิดพลาด แก้ไขอีกครั้งโดย "บังคับให้อาหาร": ฉันลองคำตอบทั้งหมดเหล่านี้และด้วยเหตุผลบางอย่างที่ยังไม่ทราบสาเหตุพวกมันไม่ทำงาน

ฉันต้อง "บังคับให้ฟีด" GOPATH โดยการตั้งค่าตัวแปรสภาพแวดล้อมสำหรับทุกคำสั่งที่ต้องการ

sudo env GOPATH=$HOME/goWorkDirectory glide install

หวังว่านี่จะช่วยใครซักคน


2

คุณ$GOROOTไม่ควรตั้งค่า คุณ$GOPATHควรตั้งค่า$HOME/goโดยการพิมพ์export $GOPATH=$HOME/go

โปรดพิมพ์export GOROOT=""เพื่อแก้ไขปัญหาของคุณ


1

export GOPATH="/whatever/you/like/your/GOPATH/to/be"เพียงแค่ทำ


4
ถ้าฉันเป็น Noob ฉันยังไม่รู้ "ที่ฉันต้องการให้ GOPATH ของฉันเป็น" IMHO เป็นการลากที่ไม่มีพฤติกรรม GOPATH เริ่มต้นซึ่งสามารถแทนที่ได้โดยตัวแปรสภาพแวดล้อม
jwfearn

0

หากคุณพบปัญหานี้หลังจาก$GOPATHตั้งค่าอาจเป็นเพราะคุณใช้งานกับเชลล์ที่ไม่รองรับ ฉันใช้งานอยู่fishและมันใช้งานไม่ได้เปิดใช้bashงานได้ดี


0

คุณสามารถใช้โซลูชัน "ส่งออก" เหมือนกับที่คนอื่นแนะนำ ฉันต้องการมอบโซลูชันอื่นให้กับคุณเพื่อความสะดวกถาวร: คุณสามารถใช้เส้นทางใดก็ได้เป็น GOPATH เมื่อเรียกใช้คำสั่ง Go

ประการแรกคุณต้องดาวน์โหลดเครื่องมือขนาดเล็กชื่อgost: https://github.com/byte16/gost/releases หากคุณใช้ ubuntu คุณสามารถดาวน์โหลดรุ่น linux ( https://github.com/byte16/gost/releases/download/v0.1.0/gost_linux_amd64.tar.gz )

จากนั้นคุณต้องเรียกใช้คำสั่งด้านล่างเพื่อแกะกล่องออก:

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

gostคุณจะได้รับการปฏิบัติการ คุณสามารถย้ายไปไว้เพื่อ/usr/local/binความสะดวกในการใช้งาน:

$ sudo mv gost /usr/local/bin

เรียกใช้คำสั่งด้านล่างเพื่อเพิ่มเส้นทางที่คุณต้องการใช้เป็น GOPATH ลงในpathspace gostรักษา มันจะต้องให้ชื่อเส้นทางที่คุณจะใช้ในภายหลัง

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

เรียกใช้คำสั่งไปที่คุณต้องการในรูปแบบ:

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

ตัวอย่างเช่นคุณต้องการเรียกใช้go get github.com/go-sql-driver/mysqlด้วย/home/foobar/barGOPATH เพียงทำตามด้านล่าง:

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

มันจะช่วยให้คุณตั้งค่า GOPATH และเรียกใช้คำสั่ง แต่จำไว้ว่าคุณได้เพิ่มเส้นทางเข้าgost's pathspace หากคุณอยู่ภายใต้ไดเรกทอรีย่อยทุกระดับ/home/foobar/barคุณสามารถเรียกใช้คำสั่งด้านล่างซึ่งจะทำสิ่งเดียวกันสั้น ๆ :

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

gostเป็น Simple Tool of Go ซึ่งสามารถช่วยคุณจัดการ GOPATH และเรียกใช้คำสั่ง Go สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีใช้เพื่อเรียกใช้คำสั่ง Go อื่น ๆ คุณสามารถเรียกgost help goCmdNameใช้ได้ ตัวอย่างเช่นคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับinstallเพียงพิมพ์คำด้านล่างใน:

$ gost help install

คุณสามารถค้นหารายละเอียดเพิ่มเติมได้ใน README ของโครงการ: https://github.com/byte16/gost/blob/master/README.md


0

เรียกใช้ 'go env' และดูว่า GOPATH ของคุณชี้ไปที่ใด หากคุณเปลี่ยนไปที่ไดเรกทอรีนั้นคำสั่ง 'go get..etc' ของคุณจะทำงานได้


0

ปัญหานี้เกิดขึ้นกับฉันในราสเบอร์รี่ปี่ ฉันลงชื่อเข้าใช้ผ่านไคลเอนต์ VNC ปัญหายังคงมีอยู่แม้จะมีการตั้งค่าและส่งออก GOPATH จากนั้นรันคำสั่ง "go get" โดยไม่มี sudo และทำงานได้อย่างสมบูรณ์


-1

ฉันต้องเรียกใช้แอปพลิเคชันในฐานะรูท (เพื่อเปิดเว็บเซิร์ฟเวอร์บนพอร์ต 80) สิ่งนี้ทำให้เกิดข้อผิดพลาดสำหรับฉันเนื่องจากผู้ใช้ sudo มีสภาพแวดล้อมที่แตกต่างจากผู้ใช้ปกติดังนั้น GOPATH จึงไม่ได้ตั้งค่า

หากบุคคลอื่นประสบปัญหานี้ให้เพิ่ม-Eคำสั่งสิ่งนี้จะรักษาสภาพแวดล้อมของผู้ใช้

sudo -E go run main.go

สำหรับข่าวสารเพิ่มเติมดูการสนทนาได้ที่นี่: Google Groups - ปัญหา GOPATH


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