พา ธ โมดูลที่มีรูปแบบไม่ถูกต้อง“ xxxx / xxxx / uuid” จุดขาดหายไปในองค์ประกอบพา ธ แรกเมื่อย้ายข้อมูลจาก GOPATH จาก dep ไปเป็น mod


12
รุ่น $ go
1.13.3

ฉันมีโครงสร้างโฟลเดอร์ดังนี้:

GOPATH
+---src
     +--- my-api-server
           +--- my-auth-server
                 +--- main.go
           +--- my-utils
                 +--- uuid
                       +--- uuid.go

my-auth-serverใช้my-api-server/my-utils/uuidเป็นที่พึ่งพา

ตอนนี้เมื่อฉันใช้ระบบโมดูลที่ใช้ GOPATH สิ่งนี้ใช้ได้ดี แต่เมื่อใช้ไปโมดูลเมื่อฉันทำงานgo run main.goในmy-auth-serverมันกลับข้อผิดพลาด:

build command-line-arguments: cannot load my-api-server/my-utils/uuid: malformed module path "my-api-server/my-utils/uuid": missing dot in first path element

ความคิดวิธีการแก้ปัญหานี้?


ดูคำตอบนี้: stackoverflow.com/a/55347424/1218512
colminator

คำตอบ:


10

go.modไฟล์ควรเป็นที่รากของโครงการของคุณ (ในกรณีนี้my-api-server/go.mod)

ส่วนแรกของเส้นทางโมดูลควรเป็นโดเมน / เส้นทาง github.com/your-github-username/my-api-serverยกตัวอย่างเช่นเส้นทางแบบเต็มอาจจะ ข้อผิดพลาดที่คุณเห็นคือเนื่องจากส่วนแรกไม่ใช่โดเมน (มีจุด) คุณไม่จำเป็นต้องเผยแพร่โมดูลเพื่อพัฒนา แต่คุณต้องใช้ชื่อโดเมนที่ถูกต้อง

เมื่อคุณมีเส้นทางโมดูลแล้วคุณสามารถนำเข้าแพ็คเกจที่อยู่ในโมดูลนั้นโดยใช้เส้นทางโมดูลแบบเต็ม + "/" + เส้นทางสัมพัทธ์ของแพ็คเกจ ตัวอย่างเช่น,

import "github.com/your-github-username/my-api-server/my-utils/uuid"

ตั้งแต่main.goและuuidมีอยู่ในโมดูลเดียวกันคุณไม่จำเป็นต้องมีrequireคำสั่งในgo.modไฟล์เพื่อใช้uuidแพ็คเกจ คุณสามารถนำเข้าได้เหมือนแพ็คเกจอื่น ๆ และมันจะใช้งานได้

ฉันขอแนะนำให้ใช้go buildและเรียกใช้ผลการดำเนินการแทนการใช้go runเพื่อให้แน่ใจว่าคุณรวมไฟล์ทั้งหมดที่คุณต้องการในกระบวนการสร้าง

ดูhttps://blog.golang.org/using-go-modulesสำหรับคำแนะนำวิธีการใช้โมดูล Go รวมถึงโพสต์ที่สองในซีรีส์เกี่ยวกับวิธีแปลงโครงการเพื่อใช้โมดูล


1

ตรวจสอบเส้นทางการนำเข้าของคุณในไฟล์ main.go ของคุณ ฉันต้องเรียกใช้เส้นทางการนำเข้าทั้งหมด "github.com/ [ชื่อผู้ใช้] / ชื่อโปรเจ็กต์ - ชื่อเหมือนกัน] แทนที่จะเป็น [project-name] / views เพื่อให้ทำงานได้ในตอนท้าย


-1

เพราะไม่สามารถหาโมดูลได้ !!!

อย่าวางโครงการของคุณไว้ใน GOPATH ... ที่ทำให้สับสน

แทน...

ตั้งใน. bashrc: ส่งออก GO111MODULE = บน

ปิดเทอร์มินัลบรรทัดคำสั่งทั้งหมดแล้วเปิดเทอร์มินัลใหม่

ไปที่โฟลเดอร์รูทโปรเจ็กต์

$ go mod init project_module_name

สิ่งนี้จะสร้างไฟล์ go.mod

ติดตั้งแพ็คเกจของคุณด้วยเวอร์ชันที่คุณต้องการ: go get -v github.com/golang/protobuf@v1.3.4

จากนั้นเรียกใช้ $ go run main.go

ตอนนี้ไฟล์ go.mod ควรบันทึกเวอร์ชันแพ็คเกจที่ Golang จะใช้เพื่อเรียกใช้และสร้าง ...

ตรวจสอบให้แน่ใจว่าคุณใช้แพ็คเกจรุ่นที่ถูกต้องโดยตรวจสอบไฟล์ go.mod! ควรมีลักษณะดังนี้: github.com/golang/protobuf v1.3.4


Do not put your project inside GOPATH... that is so confusing- นั่นคือการประชุมที่ฉันชอบเป็นพิเศษ
Ayush Gupta

นอกจากนี้ข้อผิดพลาดmissing dot in first path elementไม่ได้cannot resolve module
Ayush Gupta

Ayush Gupta ข้อผิดพลาดเกิดจากการใช้งานโมดูลที่ไม่ถูกต้อง
Russo

กำหนดincorrect?
Ayush Gupta

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