Go.mod: Difference between revisions
Line 69: | Line 69: | ||
=Using Unpublished Module Code= | =Using Unpublished Module Code= | ||
{{External|https://go.dev/doc/modules/managing-dependencies#unpublished}} | {{External|https://go.dev/doc/modules/managing-dependencies#unpublished}} | ||
Normally, <code>go get</code> is used with published, versioned releases of a project's dependencies. However, there are situations that require experimentally modifying a dependency to use it with the current project. The Go documentation refers to this situation as "developing and testing against unpublished module code". There are two ways to access a modified dependency: in a local directory on the development machine and in a forked repository. | Normally, <code>go get</code> is used with published, versioned releases of a project's dependencies. However, there are situations that require experimentally modifying a dependency to use it with the current project. The Go documentation refers to this situation as "developing and testing against unpublished module code". There are two ways to access a modified dependency: in a [[#Using_Local_Module_Code|local directory]] on the development machine and in a [[#Using_an_Arbitrary_Fork_Module_Code|forked repository]]. | ||
==Using Local Module Code== | ==Using Local Module Code== | ||
<font color=darkkhaki>TODO: https://go.dev/doc/modules/managing-dependencies#local_directory</font> | <font color=darkkhaki>TODO: https://go.dev/doc/modules/managing-dependencies#local_directory</font> | ||
==Using an Arbitrary Fork Module Code== | ==Using an Arbitrary Fork Module Code== | ||
<font color=darkkhaki>TODO: https://go.dev/doc/modules/managing-dependencies#external_fork</font> | <font color=darkkhaki>TODO: https://go.dev/doc/modules/managing-dependencies#external_fork</font> | ||
=Getting a Specific Commit= | =Getting a Specific Commit= | ||
<font color=darkkhaki>TODO: https://go.dev/doc/modules/managing-dependencies#repo_identifier</font> | <font color=darkkhaki>TODO: https://go.dev/doc/modules/managing-dependencies#repo_identifier</font> |
Revision as of 18:12, 4 January 2024
External
Internal
Overview
go.mod
declares the module path, which is the import path prefix for all packages within the module. It also tracks the modules that provide dependencies to this module. go.mod
is located in the root of the module, which is also the root of the source tree for the module.
One way to create it is with go mod init
:
go mod init <module-path>
The file can also be created manually with a text editor, but Go documentation recommends to make changes to the file via go
commands.
go.mod
stays with the code, including in the source repository.
A typical go.mod
file usually assumes that your project is hosted in GitHub, but this is not a requirement. The module path can be anything.
As go
tools are used to manage dependencies, the tools update the go.mod
file so that it maintains the current list of dependencies.
go.sum
When a dependency is added, go
creates a go.sum
file that contains checksums, in form of cryptographic hashes, of dependency modules. This is used to verify the integrity of the downloaded module files. This file should not edited manually.
Example
module example.com/hello
go 1.21.0
require rsc.io/quote v1.5.2
require (
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
rsc.io/sampler v1.3.0 // indirect
)
Initialize go.mod
In the module root directory, initialize the go.mod
file.
go mod init <module-path>
go mod init example.com/generic
Adding a Dependency to a Module
Dependencies are added with the go get
command. The command updates go.mod
by adding the require
directive for dependencies. The require
directive tracks the minimum version of a module that the module depends on. The command also updates the module source code and places in the module cache and authenticate each module it downloads. This ensures that it's unchanged ged from when the module was published.
go get [-u] github.com/apache/yunikorn-core@v1.4.0
Note that you are adding the dependency in advance without actually referring it from the module source code, go get
will add an "// indirect" comment for that specific dependency in go.mod
.
TODO: https://pkg.go.dev/cmd/go#hdr-Add_dependencies_to_current_module_and_install_them
Variations of go get
Update Module's Dependencies
Use go list
to check if there are newer versions of dependencies. If there are available useful upgrades, use go get
command again to add the particular newer version.
Synchronize Dependencies
TODO: https://go.dev/doc/modules/managing-dependencies#synchronizing
Using Unpublished Module Code
Normally, go get
is used with published, versioned releases of a project's dependencies. However, there are situations that require experimentally modifying a dependency to use it with the current project. The Go documentation refers to this situation as "developing and testing against unpublished module code". There are two ways to access a modified dependency: in a local directory on the development machine and in a forked repository.
Using Local Module Code
TODO: https://go.dev/doc/modules/managing-dependencies#local_directory
Using an Arbitrary Fork Module Code
TODO: https://go.dev/doc/modules/managing-dependencies#external_fork
Getting a Specific Commit
TODO: https://go.dev/doc/modules/managing-dependencies#repo_identifier