the run programming how golang go package

programming - how to run go



¿Cuál es una buena práctica recomendada con Go workspaces? (9)

Estoy empezando a aprender Go y leer el código existente para aprender "cómo otros lo están haciendo". Al hacerlo, el uso de un "espacio de trabajo" ir, especialmente en lo que se refiere a las dependencias de un proyecto, parece estar por todas partes.

¿Qué (o hay) una mejor práctica común en torno al uso de uno o varios espacios de trabajo de Go (es decir, definiciones de $ GOPATH) mientras se trabaja en varios proyectos de Go? ¿Debo esperar tener un solo espacio de trabajo de Go que sea como un repositorio central de código para todos mis proyectos, o dividirlo explícitamente y configurar $ GOPATH cuando vaya a trabajar en cada uno de estos proyectos (algo así como un pitón virtualenv)?


En mi empresa, creé Virtualgo para hacer que administrar múltiples GOPATH muy fácil. Un par de ventajas sobre el manejo manual son:

  • Cambio automático al GOPATH correcto cuando realiza un cd a un proyecto.
  • Se integra bien con herramientas de venta
  • También establece el nuevo GOBIN en su ruta, por lo que puede usar los ejecutables instalados allí.
  • Todavía tiene su GOPATH original como copia de seguridad. Si no se encuentra un paquete en el espacio de trabajo específico del proyecto, buscará en el GOPATH principal.


Pruebe envirius (administrador de entornos virtuales universales) . Permite compilar cualquier versión de go y crear cualquier cantidad de entornos basados ​​en ella. $GOPATH / $GOROOT dependen de cada entorno en particular.

Además, permite crear entornos con idiomas mixtos (por ejemplo, python & go en un entorno).


Si acaba de configurar GOPATH en $HOME/go o similar y comienza a trabajar, todo funciona de la caja y es realmente fácil.

Si haces muchos GOPATH con muchos GOPATH compartidos para muchos proyectos con muchas dependencias comunes en varios estados de frescura, eres, como debería ser bastante obvio, las cosas más difíciles para ti. Eso es solo más trabajo.

Si encuentra que, en ocasiones, necesita aislar algunas cosas, entonces puede hacer una GOPATH separada para manejar esa situación.

Pero en general, si te encuentras haciendo más trabajo, a menudo es porque eliges hacer las cosas más difíciles.

Tengo lo que se debe estar acercando a los 100 proyectos que he acumulado en los últimos cuatro años. Casi siempre trabajo en GOPATH , que es $HOME/go a mis computadoras.


Solía ​​usar múltiples GOPATH, docenas, de hecho. Pasar de un proyecto a otro y mantener las dependencias era mucho más difícil, porque incorporar una actualización útil en un espacio de trabajo requería que lo hiciera en los demás, a veces lo olvidaba y me rascaba la cabeza, preguntándome por qué esa dependencia funciona en un proyecto pero no otro. Fiasco.

Ahora tengo solo un GOPATH y de hecho coloqué todos mis proyectos de desarrollo (vaya o no) dentro de él. Con un espacio de trabajo central, todavía puedo mantener cada proyecto en su propio repositorio git ( src/<whatever> ) y usar git branching para administrar dependencias cuando sea necesario (en la práctica, muy raramente).

Mi recomendación: use solo un espacio de trabajo, o tal vez dos (como si necesita mantener, por ejemplo, el código de trabajo y el código personal más separados, aunque la convención de nomenclatura de ruta del paquete recomendada debería hacer eso por usted).


Solo usa GoSwitch. Ahorra mucho tiempo y cordura. Agregue la secuencia de comandos a la raíz de cada uno de sus proyectos y orícielo. Hará que el proyecto dir su ruta y también agregar / elimina la carpeta bin exacta de ese proyecto a la ruta. https://github.com/buffonomics/goswitch


Un espacio de trabajo + godep es lo mejor para mí.


Usar un GOPATH en todos tus proyectos es muy útil, pero creo que esto solo es el caso para mis propios proyectos personales.

Utilizo un GOPATH separado para cada sistema de producción que mantengo porque utilizo los submódulos de git en el árbol de directorios de cada GOPATH para congelar las dependencias.

Entonces, algo como:

~/code/my-project - src - github.com + dependency-one + dependency-two - my-org - my-project * main.go + package-one + package-two - pkg - bin

Al establecer GOPATH en ~ / code / my-project, utiliza los submódulos de dependencia-uno y dependencia-dos git dentro de ese proyecto en lugar de usar dependencias globales.


Creo que es más fácil tener un $GOPATH por proyecto, de esa manera puede tener diferentes versiones del mismo paquete para diferentes proyectos y actualizar los paquetes según sea necesario.

Con un repositorio central, es difícil actualizar un paquete ya que puede romper un proyecto no relacionado al hacerlo (si la actualización del paquete tiene cambios de última hora o nuevos errores).