ฉันจะติดตั้งแพ็คเกจกับ go get ได้อย่างไร?


133

ฉันต้องการติดตั้งแพ็คเกจจาก github ไปยัง gopath ของฉันฉันได้ลองสิ่งนี้แล้ว:

go get github.com:capotej/groupcache-db-experiment.git

พื้นที่เก็บข้อมูลเป็นที่นี่


4
หากคุณมีข้อผิดพลาดกับคำสั่งนี้ให้ลบออก.gitในท้ายบรรทัด:go get github.com:capotej/groupcache-db-experiment
Benyamin Jafari

คำตอบ:


120

สั่งไป

ดาวน์โหลดและติดตั้งแพ็คเกจและการอ้างอิง

การใช้งาน:

go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages]

ดาวน์โหลดแพ็กเกจที่ตั้งชื่อตามเส้นทางการนำเข้าพร้อมกับการอ้างอิง จากนั้นจะติดตั้งแพ็กเกจที่ตั้งชื่อเช่น 'go install'

แฟล็ก -d สั่งให้หยุดหลังจากดาวน์โหลดแพ็คเกจ นั่นคือคำสั่งไม่ให้ติดตั้งแพ็คเกจ

แฟล็ก -f ใช้ได้เฉพาะเมื่อตั้งค่า -u บังคับให้ get -u ไม่ตรวจสอบว่าแต่ละแพ็กเกจถูกเช็กเอาต์จากที่เก็บคอนโทรลซอร์สโดยนัยโดยพา ธ อิมพอร์ต สิ่งนี้จะมีประโยชน์หากแหล่งที่มาเป็นส้อมในท้องถิ่นของต้นฉบับ

แฟล็ก -fix สั่งให้รันเครื่องมือแก้ไขบนแพ็กเกจที่ดาวน์โหลดก่อนที่จะแก้ไขการอ้างอิงหรือสร้างโค้ด

แฟล็ก -insecure อนุญาตให้ดึงข้อมูลจากที่เก็บและการแก้ไขโดเมนที่กำหนดเองโดยใช้รูปแบบที่ไม่ปลอดภัยเช่น HTTP ใช้ด้วยความระมัดระวัง

แฟล็ก -t สั่งให้ดาวน์โหลดแพ็กเกจที่จำเป็นในการสร้างการทดสอบสำหรับแพ็กเกจที่ระบุ

แฟล็ก -u สั่งให้ใช้เครือข่ายเพื่ออัพเดตแพ็กเกจที่มีชื่อและการอ้างอิง โดยค่าเริ่มต้น get ใช้เครือข่ายเพื่อตรวจสอบแพ็กเกจที่ขาดหายไป แต่ไม่ได้ใช้เพื่อค้นหาการอัปเดตแพ็กเกจที่มีอยู่

แฟล็ก -v เปิดใช้งาน verbose progress และ debug output

รับยังรับสร้างแฟล็กเพื่อควบคุมการติดตั้ง โปรดดู 'go help build'

เมื่อตรวจสอบแพ็คเกจใหม่ get จะสร้างไดเร็กทอรีเป้าหมาย GOPATH / src / หาก GOPATH มีหลายรายการให้ใช้รายการแรก สำหรับรายละเอียดเพิ่มเติมโปรดดู: 'go help gopath'

เมื่อเช็คเอาต์หรืออัปเดตแพ็กเกจให้มองหาสาขาหรือแท็กที่ตรงกับ Go เวอร์ชันที่ติดตั้งในเครื่อง กฎที่สำคัญที่สุดคือหากการติดตั้งภายในเครื่องกำลังเรียกใช้เวอร์ชัน "go1" ให้ค้นหาสาขาหรือแท็กชื่อ "go1" หากไม่มีเวอร์ชันดังกล่าวระบบจะดึงสาขาเริ่มต้นของแพ็กเกจ

เมื่อไปเช็คเอาต์หรืออัปเดตที่เก็บ Git มันยังอัปเดตโมดูลย่อย git ที่อ้างอิงโดยที่เก็บ

ไม่ต้องเช็คเอาต์หรืออัปเดตรหัสที่เก็บไว้ในไดเรกทอรีของผู้ขาย

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการระบุแพ็กเกจโปรดดู 'go help package'

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธี "go get" ค้นหาซอร์สโค้ดเพื่อดาวน์โหลดโปรดดูที่ "go help importpath"

ข้อความนี้อธิบายลักษณะการทำงานของ get เมื่อใช้ GOPATH เพื่อจัดการซอร์สโค้ดและการอ้างอิง หากคำสั่ง go ทำงานในโหมดรับรู้โมดูลรายละเอียดของแฟล็กและเอฟเฟกต์ของ get จะเปลี่ยนไปเช่นเดียวกับ "go help get" ดู 'go help module' และ 'go help module-get'

ดูเพิ่มเติม: ไปสร้างไปติดตั้งทำความสะอาด


ตัวอย่างเช่นการแสดงเอาต์พุต verbose

$ go get -v github.com/capotej/groupcache-db-experiment/...
github.com/capotej/groupcache-db-experiment (download)
github.com/golang/groupcache (download)
github.com/golang/protobuf (download)
github.com/capotej/groupcache-db-experiment/api
github.com/capotej/groupcache-db-experiment/client
github.com/capotej/groupcache-db-experiment/slowdb
github.com/golang/groupcache/consistenthash
github.com/golang/protobuf/proto
github.com/golang/groupcache/lru
github.com/capotej/groupcache-db-experiment/dbserver
github.com/capotej/groupcache-db-experiment/cli
github.com/golang/groupcache/singleflight
github.com/golang/groupcache/groupcachepb
github.com/golang/groupcache
github.com/capotej/groupcache-db-experiment/frontend
$ 

17
หากสิ่งนี้ช่วยใครได้วิธีแก้ปัญหาของฉัน ( package github.com/coreos/go-iptables.git: invalid version control suffix in github.com/ path) คือการลบ.gitคำต่อท้ายออกจาก URL ของ Github
Excalibur

6
สิ่งที่ไม่-vทำอะไร?
yu yang Jian

3
@yuyangJian มันหมายถึงเอาต์พุต verbose
omrsin

3
ชอบที่-vคำสั่งไม่ได้รับการอ้างอิงในรายการนั้น lol fml ... แน่นอนมันหมายถึงverbose tho
Alexander Mills

2
คุณจะเรียกใช้เมื่อคุณใช้งานได้go getอย่างไร?
acjay

75

อันดับแรกเราต้องมี GOPATH

$GOPATHเป็นโฟลเดอร์ (หรือชุดของโฟลเดอร์) ระบุโดยตัวแปรสภาพแวดล้อมของตน เราต้องสังเกตว่านี่ไม่ใช่$GOROOTไดเร็กทอรีที่ติดตั้ง Go

export GOPATH=$HOME/gocode
export PATH=$PATH:$GOPATH/bin

เราใช้~/gocodeเส้นทางในคอมพิวเตอร์ของเราเพื่อจัดเก็บแหล่งที่มาของแอปพลิเคชันของเราและการอ้างอิง GOPATHไดเรกทอรียังจะเก็บไบนารีของแพคเกจของพวกเขา

จากนั้นเลือกไปที่ env

ระบบของคุณต้องมี$GOPATHและ$GOROOTด้านล่างคือ Env ของฉัน:

GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/elpsstu/gocode"
GORACE=""
GOROOT="/home/pravin/go"
GOTOOLDIR="/home/pravin/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

ตอนนี้คุณเรียกใช้แพ็คเกจ download go:

go get [-d] [-f] [-fix] [-t] [-u] [build flags] [packages]

ดาวน์โหลดและติดตั้งแพ็กเกจที่ตั้งชื่อตามเส้นทางการนำเข้าพร้อมกับการอ้างอิง สำหรับรายละเอียดเพิ่มเติมที่คุณสามารถดูที่นี่


1
สภาพแวดล้อมการเดินทางของฉันโอเคอยู่แล้ว แต่ฉันไม่คุ้นเคยกับกฎgo getดังนั้นจึงgithub.com:capotej/groupcache-db-experiment.gitไม่ผิดกฎหมายเส้นทางกฎหมายคืออะไร?
roger

2
ลองไปรับ -v github.com/capotej/groupcache-db-experiment / ... ตามที่ @peterSO กล่าว
Pravin Mishra

1
เริ่มต้นด้วย Go v1.8 GOPATHค่าเริ่มต้นเป็น$HOME/goif not set ที่มา1 , 2 .
Manavalan Gajapathy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.