Version Selection Algorithm

When a project has dependencies on the same third-party package with inconsistent versions, Go Modules uses the “minimal version selection algorithm” (The minimal version selection algorithm: https://github.com/golang/go/wiki/Modules#version-selection).

For example, if your module depends on module A with require D v1.0.0, and also depends on module B with require D v1.1.1, the minimal version selection will choose version v1.1.1 of D for building (using the highest version).

Please don’t ask why this algorithm is called the “minimal version selection algorithm,” yet it resembles a “highest version selection algorithm.” If you have any concerns about this, feel free to raise an issue with the official: https://github.com/golang/go/issues

Private Dependency Management

If you can perfectly manage your project package dependencies via go.mod, you may skip this section. If you encounter issues with package dependency management in projects, it is suggested that you continue reading for inspiration on problem-solving.

In the preceding sections, we provided a very detailed, illustrated guide on the installation/configuration of the development environment and the installation/use of Go Module. In actual project development, you may come across more issues, commonly:

  1. Although GoFrame is powerful, most of the time the dependencies include not only GoFrame but also some additional third-party packages, especially packages from golang.org, which may require a proxy for downloading. This can be handled locally more easily, but may cause some inconvenience on automated deployment systems;
  2. Some self-developed third-party packages, particularly business-specific packages, cannot be publicly downloaded (private libraries), and the version control system might not support the HTTPS protocol, making it impossible to use go get or go.mod for downloading and managing;
  3. Etc.

If you encounter the above issues, we recommend setting valid domains for private packages through GOPRIVATE.

For example, the following command-line approach:

  1. export GOPROXY=https://goproxy.cn
  2. export GOPRIVATE=git.xxx.com
  3. CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main main.go

This feature requires Go v1.13 or higher.

Set it up in Goland as follows:

Private Modules - 图1