Ir, ir a search, ir a instalar, packages locales y control de versiones

Tengo problemas para entender el flujo de trabajo para crear un proyecto go que tenga packages locales.

Digamos que creo un nuevo proyecto, usando git para control de versiones, que tiene un file main.go y un file tools.go que estará en utilidades de package. Entonces tengo una estructura de directorys como esta:

/myproject/ main.go utils/ tools.go 

main.go se ve así:

 package main import "./utils" func main() { utils.DoSomthing() } 

y tools.go se ve así:

 package utils; func DoSomething() { } 

Todo funciona perfectamente localmente, usando go build y go run . Pero esto está alojado en github, y me gustaría que otros usen el command go get para instalarlo. Entonces, la import del package local debe cambiarse para usar el formatting "github.com/user/project/utils", que funciona, excepto que ahora tengo dos copys del código fuente, y el verdadero problema es que la copy con el historial de git tiene una import que hace uso de la copy descargada. Entonces, si estoy trabajando en la copy con el historial de git, cualquier cambio realizado en tools.go pasará desapercibido, porque usará la copy descargada.

Así que me pregunto si alguien puede explicar la forma correcta de usar go get , control de versiones e importaciones de packages dentro del mismo proyecto.

Solutions Collecting From Web of "Ir, ir a search, ir a instalar, packages locales y control de versiones"

Acabo de escribir una breve guía paso a paso sobre cómo estoy usando la nueva herramienta go y github.com . Tu podrias encontrar esto útil:

1. Configura tu GOPATH

Puede establecer la variable de entorno GOPATH en el directory que desee. Si tiene proyectos más grandes, probablemente sea una buena idea crear un GOPATH diferente para cada uno de ellos. Recomendaría este enfoque, especialmente para la implementación, de modo que la actualización de una biblioteca para el proyecto A no rompa el proyecto B, que podría requerir una versión anterior de la misma biblioteca.

También tenga en count que puede establecer su GOPATH en una list de directorys, delimitada por dos puntos. Por lo tanto, es posible que tenga un GOPATH que contenga todos los packages comúnmente utilizados, y GOPATHS por separado para cada proyecto con packages adicionales o versiones diferentes de packages existentes.

Pero a less que esté trabajando en muchos proyectos Go diferentes simultáneamente, probablemente sea suficiente tener solo un GOPATH localmente. Entonces, creemos uno:

 mkdir $HOME/gopath 

Luego debe establecer dos variables de entorno para indicarle a la herramienta ir dónde puede encontrar los packages Go existentes y dónde debe instalar los nuevos. Probablemente sea mejor agregar las siguientes dos líneas a su ~/.bashrc o ~/.profile (y no olvide volver a cargar su .bashrc).

 export GOPATH="$HOME/gopath" export PATH="$GOPATH/bin:$PATH" 

2. Crea un nuevo proyecto

Si desea crear un nuevo proyecto Go que debe estar alojado en github.com más adelante, debe crear este proyecto en $GOPATH/src/github.com/myname/myproject . Es importante que la ruta coincida con la URL del repository de github.com, ya que la herramienta ir seguirá la misma convención. Entonces, creemos la raíz del proyecto e inicialicemos un nuevo repository git allí:

 mkdir -p $GOPATH/src/github.com/myname/myproject cd $GOPATH/src/github.com/myname/myproject git init 

Como no me gusta escribir routes tan largas, normalmente creo enlaces simbólicos para los proyectos en los que estoy trabajando en la carpeta de inicio:

 ln -s $GOPATH/src/github.com/myname/myproject ~/myproject 

3. Escribe tu aplicación

Comience a codificar y no se olvide de git add y git commit sus files. Además, no use importaciones relativas como la import "./utils" para import "./utils" . Actualmente no están documentados y no deben utilizarse en absoluto, ya que no funcionarán con la herramienta ir. Use importaciones como github.com/myname/myproject/utils en github.com/myname/myproject/utils lugar.

4. Publica tu proyecto

Cree un nuevo repository en github.com , suba su key pública SSH si no lo ha hecho antes y envíe sus cambios al repository remoto:

 git remote add origin git@github.com:myname/myproject.git git push origin master 

5. Continúa trabajando en tu proyecto

Si ha configurado GOPATH en su .bashrc y ha creado un enlace simbólico a su proyecto en su carpeta de inicio, puede simplemente escribir cd myproject/ y editar algunos files allí. Luego, puede enviar los cambios usando git commit -a y enviarlos a github.com haciendo un git push .

Probablemente no quieras dos copys de la fuente. Después de Cómo escribir código Go , debe tener una ruta donde realice su desarrollo Go, digamos "godev", y debajo de eso, un directory "src", y debajo de eso, su "github.com/user/project" y "github.com/user/project/utils". (Estoy de acuerdo, parece un poco rígido, pero la ventaja que se nos explica es la libertad de crear files). Elimine el proyecto, aquí es donde hará su trabajo.

Tendrás a GOPATH configurado como godev al less, pero es probable que desees que tu GOPATH comience con una ruta para packages externos que no sean tuyos. Por ejemplo, el GOPATH que uso es <my place on the file system>/goext:<my place on the file system>/godev .

Tiene razón en que su import en main.go ahora debe leer "github.com/user/project/utils".

No se preocupe por get get o alguno de los commands de ir sobrescribiendo sus files o arruinando el control de versiones. A través de GOPATH, ven dónde trabajas y saben cómo funciona el control de versiones.

Si desea mantener su código en el repository de la versión local, simplemente ponga su código en GOPATH.

GOPATH acepta múltiples routes. p.ej. en linux

 GOPATH=$HOME/go:$HOME/prj/foo 

Entonces, podría get packages de terceros instalados en $ HOME / go / src / … Y, podría mantener su código controlado en $ HOME / prj / foo / src.

ref: go help gopath