Modul Go ialah ciri penting yang diperkenalkan dalam bahasa Go versi 1.11, yang boleh membantu pembangun mengurus dan bergantung pada perpustakaan pihak ketiga dalam projek dengan lebih baik. Untuk projek sebelumnya yang dibangunkan dalam mod bukan modul, editor PHP Banana memberitahu semua orang bahawa modul dan modul bukan modul boleh diterbitkan dalam laluan yang sama. Kelebihan ini ialah ia boleh memindahkan projek sedia ada dengan mudah dan beransur-ansur ke mod modul, sambil mengekalkan kebolehgunaan dan kestabilan projek. Walau bagaimanapun, perlu diingatkan bahawa apabila menerbitkan modul dan modul bukan modul di bawah laluan yang sama, anda perlu mengikuti beberapa peraturan dan konvensyen untuk memastikan operasi normal projek.
Saya mempunyai perpustakaan kecil yang telah dihoskan dalam repositori bukan modul, tetapi saya kini mahu menukarnya kepada modul go.
Saya berjaya melaksanakan:
go mod init go mod tidy
go.mod
和 go.sum
Fail dibuat tanpa ralat dan perpustakaan masih lulus ujian.
Versi sebelumnya adalah v2.0.0
,所以我将版本增加到v3.0.0
,并将/v3
添加到go.mod
di hujung nama modul. Daripada apa yang saya lihat dalam talian, inilah yang diperlukan.
Fail go.mod
saya kelihatan seperti ini:
module tssgit.reyrey.com/teschste/go-utils/v3 go 1.19 require ( github.com/lib/pq v1.10.9 golang.org/x/text v0.9.0 )
Saya kemudian menerbitkan perpustakaan ke pelayan git dalaman kami dan fikir saya sudah bersedia.
Apabila saya cuba menambah perpustakaan pada projek modul go baharu, saya mendapat mesej berikut:
Installing: tssgit.reyrey.com/teschste/go-utils/v3 Installing dependency: tssgit.reyrey.com/teschste/go-utils/v3 go: module tssgit.reyrey.com/teschste/go-utils@upgrade found (v2.0.0+incompatible), but does not contain package tssgit.reyrey.com/teschste/go-utils/v3 Failed to add dependencies: exit status 1
Saya mendapati bahawa jika saya menambah v3.0.0
发布到新路径 (tssgit.reyrey.com/teschste/go-utils2
), saya berjaya menambahkannya pada projek baharu saya, walaupun saya menambah versi projek utama sekali lagi.
Adakah saya kehilangan sesuatu yang membolehkan saya meneruskan penerbitan pada laluan yang sama, atau adakah ini hanya sesuatu yang anda tidak boleh lakukan?
Sebarang bantuan akan sangat dihargai!
Ya, ini disokong. Subdirektori versi adalah pilihan.
Saya menemui situasi yang menyebabkan ralat yang anda lihat. Ini berlaku apabila cawangan induk tidak dikemas kini (masih menunjuk pada tag v2.0.0
)并且新标签 v3.0.0
dan tidak ditolak ke pelayan. Sila semak semula untuk memastikan repositori jauh dikemas kini.
Jika repositori jauh telah dikemas kini tetapi masih tidak berfungsi, anda boleh mengecilkan masalah seperti ini:
Gunakan -x
选项运行 go get
:
$ go get -x tssgit.reyrey.com/teschste/go-utils/v3
cd
Pergi ke direktori yang ditunjukkan dalam output. Laluan direktori adalah seperti ini:
/home/username/go/pkg/mod/cache/vcs/96f42aa32430149c99ad6625ceafc5b59e047b9e11d6a03f687d59845b53b2d5
Dalam direktori ini, jalankan git ls-remote -q origin
并检查输出。下面的例子是我的机器上不工作时的例子。可以看到head
和v2.0.0
都指向同一个commit id,并且没有v3.0.0
.
$ git ls-remote -q origin 5ac4c172806e80461086ea9feb485cec0b6a27f0 HEAD 5ac4c172806e80461086ea9feb485cec0b6a27f0 refs/heads/main bbdc583c0b83489db1a30fa6ca8559ffa295a74d refs/heads/other-branch 5ac4c172806e80461086ea9feb485cec0b6a27f0 refs/tags/v2.0.0
Atas ialah kandungan terperinci Bolehkah modul Go diterbitkan dalam laluan yang sama seperti modul bukan modul sebelumnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!