¿Cuál es la diferencia entre `go get` y `go install` en Go?
¡Hola! Recientemente comencé a estudiar Go y estoy tratando de entender la gestión de dependencias y la compilación de proyectos. A menudo veo el uso de los comandos `go get` y `go install`, pero no comprendo del todo cuál es la diferencia entre ellos.
Por ejemplo, quiero instalar la utilidad `hey` para pruebas de carga. En la documentación dice: `go get -u github.com/rakyll/hey` y `go install github.com/rakyll/hey@latest`. Ambos comandos parecen descargar e instalar el programa, pero noté que después de `go get` el binario apareció en `$GOPATH/bin`, y después de `go install` también allí, pero además en la carpeta del proyecto apareció un archivo `go.sum`.
También probé usar `go get` para agregar una librería a mi proyecto: `go get github.com/gin-gonic/gin`. Después de eso, en `go.mod` apareció una línea con la dependencia, y en `go.sum` los hashes. Pero leí que en las versiones nuevas de Go (1.16+) `go get` no se recomienda para instalar binarios, sino solo para gestionar dependencias.
¿Pueden explicar cuál es exactamente la diferencia? ¿Cuándo debo usar cada uno?