Go อัปเดตแพ็คเกจของบุคคลที่สามได้อย่างไร


189

กำลังมองหาแพคเกจ golang ที่เติบโตและปรับปรุงอย่างแข็งขันฉันสงสัยว่าปัญหาของรุ่นแพ็คเกจจะได้รับการแก้ไขอย่างไร

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

แต่ถ้าฉันติดตั้งด้วยgo getล่ะ

คำตอบ:


309

go getจะติดตั้งแพ็กเกจในไดเรกทอรีแรกที่แสดงรายการไว้ที่GOPATH(ตัวแปรสภาพแวดล้อมซึ่งอาจมีรายการไดเรกทอรีที่คั่นด้วยโคลอน) คุณสามารถใช้go get -uเพื่ออัพเดตแพ็คเกจที่มีอยู่

คุณยังสามารถใช้go get -u allเพื่ออัปเดตแพ็คเกจทั้งหมดในGOPATH

สำหรับโครงการขนาดใหญ่อาจมีเหตุผลที่จะสร้าง GOPATH ที่แตกต่างกันสำหรับแต่ละโครงการดังนั้นการอัปเดตไลบรารีในโครงการ A จะไม่ทำให้เกิดปัญหาในโครงการ B

พิมพ์go help gopathเพื่อค้นหาข้อมูลเพิ่มเติมเกี่ยวกับGOPATHตัวแปรสภาพแวดล้อม


2
เป็นไปได้หรือไม่ที่จะอัปเดตแพ็คเกจทั้งหมดเป็นเวอร์ชั่นล่าสุด
chourobin

73
ควรgo get -u all เสียใจที่จะฟื้นคืนชีพ แต่ในกรณีที่คนอื่นกำลังมองหา
Dan Anderson

go get -u allไม่ทำงานอีกต่อไป! การใช้คำสั่งนี้ใน GOPATH อย่างน้อยสำหรับ Go 1.13 จะส่งคืนคำเตือน: `คำเตือน" ทั้งหมด "ไม่จับคู่แพ็กเกจ"
Contrapak

ใช้ได้กับ Go 1.12.9
fviktor


18

เนื่องจากคำถามที่กล่าวถึงห้องสมุดบุคคลที่สามและไม่ใช่ทุกแพ็คเกจคุณอาจต้องการกลับไปใช้สัญลักษณ์แทน

กรณีใช้งาน: ฉันแค่ต้องการอัปเดตแพ็คเกจทั้งหมดของฉันที่ได้รับจาก Github VCS จากนั้นคุณก็จะพูดว่า:

go get -u github.com/... // ('...' being the wildcard). 

สิ่งนี้จะดำเนินต่อไปและอัปเดตแพ็คเกจ GitHub ของคุณในปัจจุบันเท่านั้น $GOPATH

เช่นเดียวกันสำหรับภายใน VCS ด้วยเช่นกันคุณต้องการอัพเกรดแพ็คเกจทั้งหมดจาก repo ของ ogranizaiton A เนื่องจากพวกเขาได้เปิดตัวโปรแกรมแก้ไขด่วนที่คุณต้องพึ่งพา:

go get -u github.com/orgA/...

11

คำตอบข้างต้นมีปัญหาดังต่อไปนี้:

  1. พวกเขาอัปเดตทุกอย่างรวมถึงแอพของคุณ (ในกรณีที่คุณมีการเปลี่ยนแปลงที่ไม่มีข้อผูกมัด)
  2. พวกเขาอัปเดตแพ็คเกจที่คุณอาจนำออกจากโครงการของคุณแล้ว แต่มีอยู่ในดิสก์ของคุณแล้ว

เพื่อหลีกเลี่ยงสิ่งเหล่านี้ให้ทำดังต่อไปนี้:

  1. ลบโฟลเดอร์อื่น ๆ ที่คุณต้องการอัปเดต
  2. ไปที่โฟลเดอร์แอปของคุณและเรียกใช้ go get -d

2

ไป 1.13

(exec จากไดเรกทอรีรากโมดูล)

อัปเดตการอ้างอิงที่ระบุ:

go get -u <package-name>

อัปเดตการอ้างอิงโดยตรงและโดยอ้อมทั้งหมดเป็นการอัปเดตย่อยหรือการอัปเดตแพทช์ล่าสุด (ละเว้นการเผยแพร่ล่วงหน้า):

go get -u ./...
# or
go get -u=patch ./...

อ้างอิง:

https://github.com/golang/go/wiki/Modules#daily-workflow

go help get



-2

ไปที่เส้นทางและประเภท

go get -u ./..

มันจะอัปเดตทุกแพคเกจที่จำเป็น


การตีความตามตัวอักษรนี้ไม่ทำงาน บริบทเพิ่มเติมจะมีประโยชน์
Contrapak

2
ฉันเชื่อว่าเขาหมายถึงgo get -u ./...(3 จุด)
Brian Leishman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.