A partir de v1.11 Go, se agregó soporte para módulos. Comandos
go mod init <package name>
go build
generaría archivos go.mody go.sumque contienen todas las versiones encontradas para las dependencias del paquete.
Si un módulo no tiene ninguna versión, se utiliza la última confirmación de ese módulo. Si un módulo tiene lanzamientos, el último se elige como dependencia.
Sin embargo, a veces necesitaría una funcionalidad que aún no está en una versión publicada, sino de una confirmación realizada después de esa versión. ¿Cómo configuro go.modpara apuntar no a una versión de un módulo, sino a una confirmación específica en el repositorio del módulo?
Parece que puedo hacerlo a mano. Mod con
module /my/module
require (
...
github.com/someone/some_module v0.0.0-20181121201909-af044c0995fe
...
)
donde v0.0.0no corresponde a la última etiqueta de lanzamiento publicada, 20181121201909¿sería una marca de tiempo de confirmación y af044c0995fesería el hash de confirmación? ¿Debería encontrarse e ingresar esa información a mano, o hay una mejor manera?

/commits, pero no debajo/pulls. Vea más información aquí: golang / go # 31191 filtra explícitamente este tipo de confirmaciones.go getgo getes la forma correcta de actualizar / agregar dego.modla forma que solicitó el OP.Además de la respuesta de Everton sobre el uso
go get github.com/someone/some_module@af044c0995fepara obtener un compromiso específico, también puede usar nombres de sucursales como:go get github.com/someone/some_module@mastergo get github.com/someone/some_module@dev_branchEstos ejemplos obtienen la última confirmación en la rama correspondiente.
Todavía se grabará como una pseudoversión en su
go.modarchivo, comov0.0.0-20171006230638-a6e239ea1c69. (Esto ayuda a proporcionar un pedido total simple en todas las versiones basado en el pedido estándar de semver ).fuente
replaceusar una bifurcación temporal de alguna dependencia, pero no pude encontrar una manera de hacer que ese reemplazo apunte a algún compromiso. Tuve que crear una etiqueta de versión y especificarla asíreplace github.com/original/somelib => github.com/fork/somelib v1.2.3, lo cual es demasiado cuando solo quiero probar cosas rápidamente.replace github.com/original/somelib => github.com/fork/somelib@commithashyreplace github.com/original/somelib => github.com/fork/somelib commithashno funcionanMe he estado golpeando la cabeza durante algún tiempo sobre cómo funciona para todos y no puedo ejecutarlo. Para mí, tuve que comprometerme con la rama maestra y solo yo pude obtenerla.
Para ir a trabajar con una rama específica, ID de confirmación o etiqueta, debe habilitar una bandera para el módulo de ir ejecutando el siguiente comando
después de esto seremos capaces de hacer
go get repo@branchname go get repo@tag go get repo@commithashfuente
Si desea sustituir temporalmente una dependencia a un directorio local (por ejemplo, si trabaja en 2 módulos al mismo tiempo), puede agregar una
replacedeclaración al final delgo.modarchivo:module example.com/mypkg go 1.15 require ( gitlab.com/someone/a_package v0.14.2 ) replace gitlab.com/someone/a_package => ../my_forks/a_packagefuente
Además, si coloca la palabra más reciente en lugar de la etiqueta en el archivo go.mod, se cambiará a la última etiqueta de los módulos.
Por ejemplo:
se convertirá
module /my/module require ( ... github.com/someone/some_module v2.0.39 ... )despues de correr
go mod tidyfuente