Tham chiếu tệp go.mod
Mỗi mô-đun Go được xác định bởi một tệp go.mod mô tả các thuộc tính của mô-đun, bao gồm các dependency của mô-đun đó với các mô-đun khác và với các phiên bản Go.
Các thuộc tính này bao gồm:
- đường dẫn mô-đun của mô-đun hiện tại. Đây phải là một vị trí mà từ đó các công cụ Go có thể tải xuống mô-đun, chẳng hạn như vị trí kho lưu trữ của mã mô-đun. Vị trí này đóng vai trò là một mã định danh duy nhất khi được kết hợp với số phiên bản của mô-đun. Đây cũng là tiền tố của đường dẫn gói cho tất cả các gói trong mô-đun. Để biết thêm về cách Go định vị mô-đun, xem Tài liệu tham khảo về Go Modules.
- phiên bản Go tối thiểu được mô-đun hiện tại yêu cầu.
- Danh sách các phiên bản tối thiểu của các mô-đun khác được yêu cầu bởi mô-đun hiện tại.
- Các hướng dẫn, nếu có, để thay thế một mô-đun được yêu cầu bằng một phiên bản mô-đun khác hoặc một thư mục cục bộ, để loại trừ một phiên bản cụ thể của một mô-đun được yêu cầu, hoặc để bỏ qua các thư mục cụ thể trong mô-đun khi khớp các mẫu gói.
Go tạo tệp go.mod khi bạn chạy lệnh go mod init. Ví dụ sau tạo một tệp go.mod, đặt đường dẫn mô-đun của mô-đun thành example/mymodule:
$ go mod init example/mymodule
Sử dụng các lệnh go để quản lý các dependency. Các lệnh này đảm bảo rằng các yêu cầu được mô tả trong tệp go.mod của bạn vẫn nhất quán và nội dung của tệp go.mod vẫn hợp lệ. Các lệnh này bao gồm các lệnh go get, go mod tidy và go mod edit.
Để tham khảo về các lệnh go, xem Command go.
Bạn có thể nhận trợ giúp từ dòng lệnh bằng cách nhập go help command-name, như với go help mod tidy.
Xem thêm
- Các công cụ Go thực hiện thay đổi đối với tệp go.mod của bạn khi bạn sử dụng chúng để quản lý dependency. Để biết thêm, xem Quản lý dependency.
- Để biết thêm chi tiết và các ràng buộc liên quan đến tệp go.mod, xem tài liệu tham khảo về Go modules.
Ví dụ
Tệp go.mod bao gồm các chỉ thị như trong ví dụ sau. Các chỉ thị này được mô tả ở phần khác trong chủ đề này.
module example.com/mymodule
go 1.14
require (
example.com/othermodule v1.2.3
example.com/thismodule v1.2.3
example.com/thatmodule v1.2.3
)
replace example.com/thatmodule => ../thatmodule
exclude example.com/thismodule v1.3.0
module
Khai báo đường dẫn module của module, là mã định danh duy nhất của module (khi kết hợp với số phiên bản module). Đường dẫn module trở thành tiền tố import cho tất cả các gói mà module chứa.
Để biết thêm, xem chỉ thị module trong
Tham chiếu Go Modules.
Cú pháp
module module-path
- module-path
- Đường dẫn module của module, thường là vị trí kho lưu trữ từ đó
module có thể được tải xuống bằng các công cụ Go. Đối với các phiên bản
module v2 trở lên, giá trị này phải kết thúc bằng số phiên bản chính,
chẳng hạn như
/v2.
Ví dụ
Các ví dụ sau thay thế example.com cho miền repository mà từ đó module
có thể được tải xuống.
- Khai báo module cho module v0 hoặc v1:
module example.com/mymodule - Đường dẫn module cho module v2:
module example.com/mymodule/v2
Lưu ý
Đường dẫn module phải nhận diện duy nhất module của bạn. Với hầu hết module,
đường dẫn này là một URL nơi lệnh go có thể tìm thấy mã nguồn (hoặc một
chuyển hướng đến mã nguồn). Với các module sẽ không bao giờ được tải xuống
trực tiếp, đường dẫn module có thể chỉ là một tên do bạn kiểm soát để đảm bảo
tính duy nhất. Tiền tố example/ cũng được dành riêng để sử dụng trong các
ví dụ như thế này.
Để biết thêm chi tiết, xem Quản lý dependency.
Trong thực tế, đường dẫn module thường là miền repository của mã nguồn module
và đường dẫn đến mã module bên trong repository. Lệnh go dựa vào dạng này
khi tải xuống các phiên bản module để thay mặt người dùng module giải quyết
các dependency.
Ngay cả khi ban đầu bạn không định cung cấp module của mình để mã nguồn khác sử dụng, việc sử dụng đường dẫn repository của module là một thực hành tốt, giúp bạn tránh phải đổi tên module nếu sau này xuất bản nó.
Nếu ban đầu bạn chưa biết vị trí repository cuối cùng của module, hãy cân nhắc sử dụng tạm thời một giá trị thay thế an toàn, chẳng hạn như tên của một miền mà bạn sở hữu hoặc một tên do bạn kiểm soát (chẳng hạn tên công ty của bạn), cùng với đường dẫn bắt nguồn từ tên module hoặc thư mục mã nguồn. Để biết thêm, xem Quản lý dependency.
Ví dụ: nếu bạn đang phát triển trong thư mục stringtools, đường dẫn module
tạm thời của bạn có thể là <company-name>/stringtools, như trong ví dụ sau,
trong đó company-name là tên công ty của bạn:
go mod init <company-name>/stringtools
go
Cho biết module được viết với giả định về ngữ nghĩa của phiên bản Go được chỉ định bởi chỉ thị này.
Để biết thêm, xem chỉ thị go trong Tài liệu tham khảo Go Modules.
Syntax
go minimum-go-version
- minimum-go-version
- Phiên bản Go tối thiểu cần thiết để biên dịch các gói trong module này.
Examples
- Module phải chạy trên phiên bản Go 1.14 trở lên:
go 1.14
Notes
Chỉ thị go đặt phiên bản Go tối thiểu cần thiết để sử dụng module này.
Trước Go 1.21, chỉ thị này chỉ mang tính khuyến nghị; hiện tại đây là một yêu cầu bắt buộc:
các bộ công cụ Go từ chối sử dụng các module khai báo phiên bản Go mới hơn.
Chỉ thị go là đầu vào để lựa chọn bộ công cụ Go sẽ chạy.
Xem “các bộ công cụ Go” để biết chi tiết.
Chỉ thị go ảnh hưởng đến việc sử dụng các tính năng ngôn ngữ mới:
- Đối với các gói trong module, trình biên dịch từ chối việc sử dụng các tính năng ngôn ngữ
được giới thiệu sau phiên bản được chỉ định bởi chỉ thị
go. Ví dụ, nếu một module có chỉ thịgo 1.12, các gói của nó không được sử dụng các literal số như1_000_000, vốn được giới thiệu trong Go 1.13. - Nếu một phiên bản Go cũ hơn xây dựng một trong các gói của module và gặp
lỗi biên dịch, lỗi đó sẽ ghi chú rằng module được viết cho một phiên bản Go
mới hơn. Ví dụ, giả sử một module có
go 1.13và một gói sử dụng literal số1_000_000. Nếu gói đó được xây dựng bằng Go 1.12, trình biên dịch ghi chú rằng mã được viết cho Go 1.13.
Chỉ thị go cũng ảnh hưởng đến hành vi của lệnh go:
- Ở
go 1.14trở lên, vendoring tự động có thể được bật. Nếu tệpvendor/modules.txttồn tại và nhất quán vớigo.mod, không cần sử dụng rõ ràng cờ-mod=vendor. - Ở
go 1.16trở lên, mẫu góiallchỉ khớp với các gói được import bắc cầu bởi các gói và bài kiểm thử trong module chính. Đây là cùng tập các gói được giữ lại bởigo mod vendorkể từ khi module được giới thiệu. Trong các phiên bản thấp hơn,allcũng bao gồm các bài kiểm thử của các gói được import bởi các gói trong module chính, các bài kiểm thử của những gói đó, và cứ tiếp tục như vậy. - Ở
go 1.17trở lên:- Tệp
go.modbao gồm một chỉ thịrequirerõ ràng cho mỗi module cung cấp bất kỳ gói nào được import bắc cầu bởi một gói hoặc bài kiểm thử trong module chính. (Ởgo 1.16trở xuống, một dependency gián tiếp chỉ được đưa vào nếu lựa chọn phiên bản tối thiểu nếu không sẽ chọn một phiên bản khác.) Thông tin bổ sung này cho phép loại bỏ đồ thị module và tải module lười. - Vì có thể có nhiều dependency
// indirecthơn đáng kể so với các phiên bảngotrước đây, các dependency gián tiếp được ghi lại trong một khối riêng trong tệpgo.mod. go mod vendorbỏ qua các tệpgo.modvàgo.sumcủa các dependency được vendoring. (Điều đó cho phép các lần gọi lệnhgotrong các thư mục con củavendorxác định module chính chính xác.)go mod vendorghi lại phiên bảngotừ tệpgo.modcủa mỗi dependency trongvendor/modules.txt.
- Tệp
- Ở
go 1.21trở lên:- Dòng
gokhai báo phiên bản Go tối thiểu bắt buộc để sử dụng với module này. - Dòng
gophải lớn hơn hoặc bằng dònggocủa tất cả dependency. - Lệnh
gokhông còn cố gắng duy trì khả năng tương thích với phiên bản Go cũ hơn trước đó. - Lệnh
gocẩn thận hơn trong việc giữ các checksum của tệpgo.modtrong tệpgo.sum.
- Dòng
Một tệp go.mod có thể chứa nhiều nhất một chỉ thị go. Hầu hết các lệnh sẽ thêm một
chỉ thị go với phiên bản Go hiện tại nếu chưa có.
toolchain
Khai báo một Go toolchain được đề xuất để sử dụng với module này. Chỉ có hiệu lực khi module là module chính và toolchain mặc định cũ hơn toolchain được đề xuất.
Để biết thêm, xem “Go toolchains” và
chỉ thị toolchain trong
Tài liệu tham khảo Go Modules.
Syntax
toolchain toolchain-name
- toolchain-name
- Tên của Go toolchain được đề xuất. Tên toolchain tiêu chuẩn có dạng
goVcho một phiên bản Go V, nhưgo1.21.0vàgo1.18rc1. Giá trị đặc biệtdefaultvô hiệu hóa việc chuyển đổi toolchain tự động.
Examples
- Đề xuất sử dụng Go 1.21.0 hoặc mới hơn:
toolchain go1.21.0
Notes
Xem “Go toolchains” để biết chi tiết về cách dòng toolchain
ảnh hưởng đến việc lựa chọn Go toolchain.
godebug
Chỉ ra các thiết lập GODEBUG mặc định được áp dụng cho các gói chính của module này.
Các thiết lập này ghi đè mọi giá trị mặc định của toolchain và bị ghi đè bởi các dòng //go:debug rõ ràng trong các gói chính.
Syntax
godebug debug-key=debug-value
- debug-key
- Tên của thiết lập được áp dụng. Danh sách các thiết lập và các phiên bản mà chúng được giới thiệu có thể được tìm thấy tại Lịch sử GODEBUG.
- debug-value
- Giá trị được cung cấp cho thiết lập.
Nếu không được chỉ định khác,
0để vô hiệu hóa và1để bật hành vi được đặt tên.
Examples
- Sử dụng hành vi
asynctimerchan=0mới trong 1.23:godebug asynctimerchan=0 - Sử dụng GODEBUG mặc định từ Go 1.21, nhưng sử dụng hành vi
panicnil=1cũ:godebug ( default=go1.21 panicnil=1 )
Notes
Các thiết lập GODEBUG chỉ áp dụng cho các bản dựng của gói chính và các binary kiểm thử trong module hiện tại. Chúng không có tác dụng khi một module được sử dụng làm dependency.
Xem “Go, Backwards Compatibility, and GODEBUG” để biết chi tiết về khả năng tương thích ngược.
require
Khai báo một module là dependency của module hiện tại, chỉ định phiên bản tối thiểu của module được yêu cầu.
Để biết thêm, xem chỉ thị require trong
Tài liệu tham chiếu Go Modules.
Syntax
require module-path module-version
- module-path
- Đường dẫn module của module, thường là sự kết hợp giữa miền của kho lưu trữ
nguồn module và tên module. Đối với các phiên bản module v2 trở lên,
giá trị này phải kết thúc bằng số phiên bản chính, chẳng hạn như
/v2. - module-version
- Phiên bản của module. Giá trị này có thể là số phiên bản bản phát hành, chẳng hạn như v1.2.3, hoặc số phiên bản giả do Go tạo, chẳng hạn như v0.0.0-20200921210052-fa0125251cc4.
Examples
- Yêu cầu một phiên bản đã phát hành v1.2.3:
require example.com/othermodule v1.2.3 - Yêu cầu một phiên bản chưa được gắn thẻ trong kho lưu trữ của nó bằng cách sử dụng số
phiên bản giả do các công cụ Go tạo:
require example.com/othermodule v0.0.0-20200921210052-fa0125251cc4
Notes
Khi bạn chạy một lệnh go như go get, Go chèn các chỉ thị require
cho mỗi module chứa các gói đã nhập. Khi một module chưa được gắn thẻ trong
kho lưu trữ của nó, Go gán một số phiên bản giả được tạo khi bạn chạy
lệnh đó.
Bạn có thể yêu cầu Go sử dụng một module từ vị trí khác với kho lưu trữ của nó bằng
cách sử dụng chỉ thị replace.
Để biết thêm về số phiên bản, xem Đánh số phiên bản module.
Để biết thêm về quản lý dependency, xem các nội dung sau:
- Thêm một dependency
- Lấy một phiên bản dependency cụ thể
- Khám phá các bản cập nhật có sẵn
- Nâng cấp hoặc hạ cấp một dependency
- Đồng bộ hóa dependency của mã nguồn
tool
Thêm một gói làm dependency của module hiện tại và cho phép chạy gói đó bằng go tool khi thư mục làm việc hiện tại nằm trong module này.
Cú pháp
tool package-path
- package-path
- Đường dẫn gói của công cụ, là sự kết hợp giữa module chứa công cụ và đường dẫn (có thể rỗng) đến gói triển khai công cụ trong module đó.
Ví dụ
- Khai báo một công cụ được triển khai trong module hiện tại:
module example.com/mymodule tool example.com/mymodule/cmd/mytool - Khai báo một công cụ được triển khai trong một module riêng:
module example.com/mymodule tool example.com/atool/cmd/atool require example.com/atool v1.2.3
Ghi chú
Bạn có thể sử dụng go tool để chạy các công cụ được khai báo trong module của mình bằng đường dẫn gói đầy đủ hoặc, nếu không có sự mơ hồ, bằng phần cuối cùng của đường dẫn. Trong ví dụ đầu tiên ở trên, bạn có thể chạy go tool mytool hoặc go tool example.com/mymodule/cmd/mytool.
Trong chế độ workspace, bạn có thể sử dụng go tool để chạy một công cụ được khai báo trong bất kỳ module workspace nào.
Các công cụ được xây dựng bằng cùng đồ thị module với chính module đó. Cần có chỉ thị require để chọn phiên bản của module triển khai công cụ. Bất kỳ chỉ thị replace hoặc chỉ thị exclude nào cũng áp dụng cho công cụ và các dependency của nó.
Để biết thêm thông tin, xem Dependency của công cụ.
replace
Thay thế nội dung của một module tại một phiên bản cụ thể (hoặc tất cả phiên bản) bằng một phiên bản module khác hoặc bằng một thư mục cục bộ. Các công cụ Go sẽ sử dụng đường dẫn thay thế khi phân giải dependency.
Để biết thêm, xem chỉ thị replace trong Tài liệu tham khảo Go Modules.
Cú pháp
replace module-path [module-version] => replacement-path [replacement-version]
- module-path
- Đường dẫn module của module cần thay thế.
- module-version
- Tùy chọn. Một phiên bản cụ thể cần thay thế. Nếu số phiên bản này bị bỏ qua, tất cả phiên bản của module được thay thế bằng nội dung ở phía bên phải của mũi tên.
- replacement-path
- Đường dẫn mà Go sẽ tìm module được yêu cầu. Đây có thể là đường dẫn module hoặc đường dẫn đến một thư mục trên hệ thống tệp cục bộ của module thay thế. Nếu đây là đường dẫn module, bạn phải chỉ định giá trị replacement-version. Nếu đây là đường dẫn cục bộ, bạn không được sử dụng giá trị replacement-version.
- replacement-version
- Phiên bản của module thay thế. Phiên bản thay thế chỉ có thể được chỉ định nếu replacement-path là đường dẫn module (không phải thư mục cục bộ).
Ví dụ
-
Thay thế bằng một fork của kho lưu trữ module
Trong ví dụ sau, mọi phiên bản của example.com/othermodule được thay thế bằng fork được chỉ định của mã nguồn của nó.
require example.com/othermodule v1.2.3 replace example.com/othermodule => example.com/myfork/othermodule v1.2.3-fixedKhi bạn thay thế một đường dẫn module bằng một đường dẫn khác, không thay đổi các câu lệnh import cho các gói trong module đang được thay thế.
Để biết thêm về việc sử dụng bản sao fork của mã module, xem Yêu cầu mã module bên ngoài từ fork kho lưu trữ của riêng bạn.
-
Thay thế bằng số phiên bản khác
Ví dụ sau chỉ định rằng phiên bản v1.2.3 nên được sử dụng thay vì bất kỳ phiên bản nào khác của module.
require example.com/othermodule v1.2.2 replace example.com/othermodule => example.com/othermodule v1.2.3Ví dụ sau thay thế phiên bản module v1.2.5 bằng phiên bản v1.2.3 của cùng module đó.
replace example.com/othermodule v1.2.5 => example.com/othermodule v1.2.3 -
Thay thế bằng mã cục bộ
Ví dụ sau chỉ định rằng một thư mục cục bộ nên được sử dụng làm thay thế cho tất cả các phiên bản của module.
require example.com/othermodule v1.2.3 replace example.com/othermodule => ../othermoduleVí dụ sau chỉ định rằng một thư mục cục bộ nên được sử dụng làm thay thế chỉ cho v1.2.5.
require example.com/othermodule v1.2.5 replace example.com/othermodule v1.2.5 => ../othermoduleĐể biết thêm về việc sử dụng bản sao cục bộ của mã module, xem Yêu cầu mã module trong thư mục cục bộ.
Ghi chú
Sử dụng chỉ thị replace để tạm thời thay thế giá trị đường dẫn module bằng một
giá trị khác khi bạn muốn Go sử dụng đường dẫn khác để tìm mã nguồn của module.
Điều này có tác dụng chuyển hướng việc tìm kiếm module của Go đến vị trí của
bản thay thế. Bạn không cần thay đổi các đường dẫn import gói để sử dụng đường
dẫn thay thế.
Sử dụng các chỉ thị exclude và replace để kiểm soát việc phân giải
dependency tại thời điểm build khi xây dựng module hiện tại. Các chỉ thị này bị
bỏ qua trong những module phụ thuộc vào module hiện tại.
Chỉ thị replace có thể hữu ích trong các tình huống như sau:
- Bạn đang phát triển một module mới có mã nguồn chưa có trong kho lưu trữ. Bạn muốn kiểm thử với các client bằng cách sử dụng một phiên bản cục bộ.
- Bạn đã xác định một vấn đề với một dependency, đã clone kho lưu trữ của dependency đó, và đang kiểm thử bản sửa lỗi với kho lưu trữ cục bộ.
Lưu ý rằng chỉ một chỉ thị replace không tự thêm một module vào đồ thị
module. Cũng cần có một chỉ thị
require tham chiếu đến phiên bản module đã được thay thế, trong
tệp go.mod của module chính hoặc tệp go.mod của một dependency. Nếu bạn
không có một phiên bản cụ thể để thay thế, bạn có thể sử dụng một phiên bản giả,
như trong ví dụ dưới đây. Lưu ý rằng điều này sẽ làm hỏng các module phụ thuộc
vào module của bạn, vì các chỉ thị replace chỉ được áp dụng trong module
chính.
require example.com/mod v0.0.0-replace
replace example.com/mod v0.0.0-replace => ./mod
Để biết thêm về việc thay thế một module được yêu cầu, bao gồm việc sử dụng các công cụ Go để thực hiện thay đổi, xem:
- Yêu cầu mã module bên ngoài từ fork kho lưu trữ của riêng bạn
- Yêu cầu mã module trong thư mục cục bộ
Để biết thêm về số phiên bản, xem Đánh số phiên bản module.
exclude
Chỉ định một module hoặc phiên bản module cần loại trừ khỏi đồ thị dependency của module hiện tại.
Để biết thêm, xem chỉ thị exclude trong
Tài liệu tham khảo về Go Modules.
Syntax
exclude module-path module-version
- module-path
- Đường dẫn module của module cần loại trừ.
- module-version
- Phiên bản cụ thể cần loại trừ.
Example
-
Loại trừ example.com/theirmodule phiên bản v1.3.0
exclude example.com/theirmodule v1.3.0
Notes
Sử dụng chỉ thị exclude để loại trừ một phiên bản cụ thể của một module được yêu cầu gián tiếp nhưng không thể tải vì một lý do nào đó. Ví dụ: bạn có thể sử dụng chỉ thị này để loại trừ một phiên bản module có checksum không hợp lệ.
Sử dụng các chỉ thị exclude và replace để kiểm soát việc phân giải dependency tại thời điểm build khi xây dựng module hiện tại (module chính mà bạn đang xây dựng). Các chỉ thị này bị bỏ qua trong các module phụ thuộc vào module hiện tại.
Bạn có thể sử dụng lệnh go mod edit
để loại trừ một module, như trong ví dụ sau.
go mod edit -exclude=example.com/theirmodule@v1.3.0
Để biết thêm về số phiên bản, xem Đánh số phiên bản module.
retract
Cho biết rằng một phiên bản hoặc một khoảng phiên bản của module được định nghĩa bởi go.mod không nên được phụ thuộc vào. Chỉ thị retract hữu ích khi một phiên bản được phát hành quá sớm hoặc một vấn đề nghiêm trọng được phát hiện sau khi phiên bản đó được phát hành.
Để biết thêm, xem chỉ thị retract trong
Tài liệu tham khảo về Go Modules.
Syntax
retract version // rationale retract [version-low,version-high] // rationale
- version
- Một phiên bản đơn lẻ cần thu hồi.
- version-low
- Giới hạn dưới của một khoảng phiên bản cần thu hồi.
- version-high
- Giới hạn trên của một khoảng phiên bản cần thu hồi. Cả version-low và version-high đều được bao gồm trong khoảng này.
- rationale
- Chú thích tùy chọn giải thích lý do thu hồi. Có thể được hiển thị trong thông báo gửi đến người dùng.
Ví dụ
-
Thu hồi một phiên bản duy nhất
retract v1.1.0 // Được phát hành do nhầm lẫn. -
Thu hồi một phạm vi phiên bản
retract [v1.0.0,v1.0.5] // Bản build bị lỗi trên một số nền tảng.
Ghi chú
Sử dụng chỉ thị retract để cho biết rằng một phiên bản trước đó của module không nên được sử dụng. Người dùng sẽ không tự động nâng cấp lên một phiên bản đã bị thu hồi bằng go get, go mod tidy hoặc các lệnh khác. Người dùng sẽ không thấy phiên bản đã bị thu hồi là một bản cập nhật khả dụng với go list -m -u.
Các phiên bản đã bị thu hồi nên vẫn được giữ khả dụng để những người dùng đã phụ thuộc vào chúng có thể build các gói của họ. Ngay cả khi một phiên bản đã bị thu hồi bị xóa khỏi kho lưu trữ nguồn, nó vẫn có thể khả dụng trên các mirror như proxy.golang.org. Người dùng phụ thuộc vào các phiên bản đã bị thu hồi có thể được thông báo khi họ chạy go get hoặc go list -m -u trên các module liên quan.
Lệnh go phát hiện các phiên bản đã bị thu hồi bằng cách đọc các chỉ thị retract trong tệp go.mod của phiên bản mới nhất của một module. Phiên bản mới nhất là, theo thứ tự ưu tiên:
- Phiên bản release cao nhất, nếu có
- Phiên bản pre-release cao nhất, nếu có
- Một pseudo-version cho đầu của nhánh mặc định trong kho lưu trữ.
Khi thêm một lần thu hồi, hầu như bạn luôn cần gắn thẻ một phiên bản mới cao hơn để lệnh có thể thấy nó trong phiên bản mới nhất của module.
Bạn có thể phát hành một phiên bản chỉ có mục đích duy nhất là báo hiệu các lần thu hồi. Trong trường hợp này, phiên bản mới cũng có thể tự thu hồi chính nó.
Ví dụ, nếu bạn vô tình gắn thẻ v1.0.0, bạn có thể gắn thẻ v1.0.1 với các chỉ thị sau:
retract v1.0.0 // Được phát hành do nhầm lẫn.
retract v1.0.1 // Chỉ chứa thông tin thu hồi.
Đáng tiếc là một khi một phiên bản đã được phát hành, nó không thể được thay đổi. Nếu sau đó bạn gắn thẻ v1.0.0 tại một commit khác, lệnh go có thể phát hiện tổng kiểm tra không khớp trong go.sum hoặc trong cơ sở dữ liệu checksum.
Các phiên bản đã bị thu hồi của một module thường không xuất hiện trong đầu ra của go list -m -versions, nhưng bạn có thể sử dụng -retracted để hiển thị chúng. Để biết thêm, xem go list -m trong Tài liệu tham khảo Go Modules.
ignore
Chỉ định các đường dẫn thư mục trong module mà lệnh go nên bỏ qua khi khớp các mẫu gói.
Để biết thêm, xem chỉ thị ignore trong Tham chiếu Go Modules.
Syntax
ignore path
- path
-
Đường dẫn được phân tách bằng dấu gạch chéo cần bỏ qua. Nếu đường dẫn bắt đầu bằng
./, nó được hiểu là tương đối với thư mục gốc của module. Nếu không, mọi thư mục có tên đó ở bất kỳ cấp độ nào trong module sẽ bị bỏ qua.
Examples
-
Bỏ qua một thư mục cục bộ tương đối với thư mục gốc của module
ignore ./node_modules -
Bỏ qua mọi thư mục có tên
generatedở bất kỳ đâu trong moduleignore generated -
Bỏ qua nhiều đường dẫn bằng một block
ignore ( static content/html ./third_party/javascript )
Notes
Sử dụng chỉ thị ignore để ngăn lệnh go khớp các gói trong các thư mục được tạo tự động hoặc không phải Go khi sử dụng các mẫu ký tự đại diện như ./.... Các thư mục bị bỏ qua và nội dung của chúng bị loại khỏi các mẫu gói nhưng vẫn hiện diện trong cây tệp của module.
Chỉ thị ignore chỉ áp dụng trong tệp go.mod của module chính. Nó không có tác dụng trong các tệp go.mod của các dependency.