Los módulos permiten controlar el uso de versiones de los paquetes en Go.

Esta documentación sirve para la versión ≥ 1.13.

Cuando creamos archivos .go fuera del $GOPATH y este archivo no necesita de paquetes externos, Go crea una ruta false de $GOPATH para ejecutarlo.

Usa SemVer (versión semántica) para el control de versiones. https://semver.org/lang/es/

Revisa la integridad de los paquetes por medio de los checksum.

go.mod

El archivo go.mod tiene la siguiente estructura:

module repo-server/user/package

go 1.XX

require (
	repo-server/user/package Vx.y.z
	repo-server/user/package Vx.y.z // indirect
)

replace repo-server/user/package => ../path/in/your/pc/package
exclude repo-server/user/package Vx.y.z

Ejemplo:

module github.com/alexyslozada/sql-utils

go 1.13

require (
	github.com/satori/uuid V1.0.1
	github.com/labstack/echo V3.3.1 // indirect
)

replace github.com/satori/uuid => ../pruebas/uuid
exclude github.com/labstack/echo V3.3.0

SemVer

El versionamiento se usa así:

Vx.y.z-prerelease.x.y.z

Siempre inicia con la letra v en minúscula, luego la versión major, minor y patch.

x major identifica una versión estable, que tiene compatibilidad sólo con las versiones minor y patch de dicha versión. Es decir, la versión 1.11.3 es compatible con la versión 1.7.0, pero no con la versión 2.0.0

y minor identifica una versión que tiene nuevas características dentro de la versión estable.

z patch son fix o mejoras de rendimiento en una versión estable.

prerelease.x.y.z go mod lo usa como la fecha de una versión que no tiene el tag de la versión.

Ejemplo de prerelease normal: v1.0.3-rc0, v1.0.3-rc1, etc