jalur modul salah "xxxx / xxxx / uuid" titik hilang dalam elemen jalur pertama saat bermigrasi dari dep berbasis GOPATH untuk beralih ke mod

12
versi $ go
1.13.3

Saya memiliki struktur folder sebagai berikut:

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

my-auth-servergunakan my-api-server/my-utils/uuidsebagai ketergantungan

Sekarang, ketika saya menggunakan sistem modul berbasis GOPATH, ini bekerja dengan baik. Tapi ketika menggunakan modul pergi, ketika saya menjalankan go run main.godi my-auth-serveritu kesalahan kembali:

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

Ada ide untuk mengatasi ini?

Ayush Gupta
sumber
Lihat jawaban ini: stackoverflow.com/a/55347424/1218512
colminator

Jawaban:

10

The go.modfile harus menjadi akar dari proyek Anda (dalam kasus ini, my-api-server/go.mod).

Bagian pertama dari jalur modul harus berupa domain / jalur. Misalnya, jalur lengkap mungkin github.com/your-github-username/my-api-server. Kesalahan yang Anda lihat adalah karena bagian pertama bukan domain (dengan tanda titik). Anda tidak harus menerbitkan modul untuk mengembangkannya, tetapi Anda harus menggunakan nama domain yang tepat.

Setelah Anda memiliki lintasan modul, Anda dapat mengimpor paket yang terdapat dalam modul itu menggunakan lintasan modul lengkap + "/" + lintasan relatif dari paket tersebut. Sebagai contoh,

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

Karena main.godan uuidterdapat dalam modul yang sama, Anda tidak perlu requirepernyataan dalam go.modfile untuk menggunakan uuidpaket. Anda dapat mengimpornya seperti paket lain dan akan berfungsi.

Saya sarankan menggunakan go builddan menjalankan hasil yang dapat dieksekusi daripada menggunakan go rununtuk memastikan Anda memasukkan semua file yang Anda butuhkan dalam proses membangun.

Lihat https://blog.golang.org/using-go-modules untuk penelusuran cara menggunakan modul Go, termasuk pos kedua dalam seri itu tentang cara mengonversi proyek untuk menggunakan modul.

Tyler Bui-Palsulich
sumber
1

Periksa jalur impor Anda pada file main.go Anda. Saya harus memanggil seluruh jalur impor "github.com/[username[/[project-name[/views alih-alih [nama-proyek] / tampilan untuk membuatnya bekerja di pihak saya.

Nathaniel Rand
sumber
-1

KARENA PERGI TIDAK BISA MENCARI MODUL !!!

Jangan menaruh proyek Anda di GOPATH ... itu sangat membingungkan

Sebagai gantinya...

atur dalam .bashrc: export GO111MODULE = on

tutup semua terminal baris perintah, lalu buka kembali terminal

buka folder root proyek

$ go mod init project_module_name

Ini akan menghasilkan file go.mod

Instal paket Anda dengan versi yang Anda inginkan: go get -v github.com/golang/[email protected]

Kemudian jalankan $ go run main.go

Sekarang file go.mod harus merekam versi paket yang akan digunakan Golang untuk menjalankan dan membangun ...

Pastikan Anda menggunakan versi paket yang benar dengan memeriksa file go.mod! Seharusnya terlihat seperti: github.com/golang/protobuf v1.3.4

Russo
sumber
Do not put your project inside GOPATH... that is so confusing- Itu adalah konvensi, yang saya sukai.
Ayush Gupta
Juga, kesalahannya missing dot in first path elementbukancannot resolve module
Ayush Gupta
Ayush Gupta, kesalahan disebabkan oleh penggunaan modul yang salah
Russo
Tentukan incorrect?
Ayush Gupta
versi paket yang salah memiliki path file yang salah => menyebabkan Golang tidak dapat menemukan file yang benar untuk dijalankan atau dibangun
Russo